如何为多个部分视图重用控制器?

时间:2014-10-28 08:21:25

标签: c# asp.net-mvc

我想根据发送到控制器的内容动态选择局部视图,并管理它,但我觉得我是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中会更好吗?

1 个答案:

答案 0 :(得分:0)

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

作为解决方案,您可以将页面名称存储在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();
}

这可能不是这样的确切答案......