繁体   English   中英

如何将控制器重用于多个局部视图?

[英]How can I reuse a controller for multiple partial views?

我想根据发送到控制器的内容动态选择局部视图,并对其进行了管理,但我觉得我是a)过于复杂,b)不确定如何轻松地获取所有页面链接。 每个都将依次解决。 如果我在下面犯了一个错误,请忽略,这是内存中的错误! 在家里,这一切都可行,我在澄清是否有更好的方法!

首先,我做了什么:

我有一个控制器:

private Dictionary<int, string> pagesForFolder = new Dictionary<int, string>() {
         ... here I have my list of pages (index and pagename pairs)
}

public ActionResult Test(int id = -1)
{
   try {
        string pageName = "";
        var result = pagesForFolder.TryGetValue(id, out pageName);
        if(result) 
           string directiory = "~Views/folderA/_" + pageName +".cshtml";
           return PartialView(directory);
    }
    catch(Exception ex) {  ... }
    return View();
}

然后在folderA中,我拥有网站那部分的所有部分视图。 我有很多部分,每个部分有1个控制器。 但是,我认为这不会扩展得太好,因为每次添加页面时都必须继续重建。 将页面存储在数据库中会更好吗?

我认为您目前的做法是很合理的。 我认为您提到的问题是,无论何时向字典中添加或删除新条目,都必须重新构建应用程序。

作为解决方案,您可以将页面名称存储在db中,并在需要时进行检索。

不用硬编码的字典,试试这样的东西...

在您的控制器中。

public ActionResult Test(int id = -1)
{
   try {
        string pageName =  GetYourPageFromDB(id);

        if(!string.IsNullOrEmpty(pageName)) 
                   string directiory = "~Views/folderA/_" + pageName +".cshtml";
           return PartialView(directory);
    }
    catch(Exception ex) {  ... }
    return View();
}

这可能不是确切答案,请尝试以下操作...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM