如何重复使用多个部分视图的控制器?

问题描述:

我想动态地选择一个部分视图,这取决于发送给控制器的内容,并且已经管理了它,但是我觉得我是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个控制器。但是,我认为这不会扩大,因为每次添加页面时都必须重新进行重建。将页面存储在数据库中会更好吗?

+0

你是什么意思“每次添加页面时都要重建”?你的意思是你的应用的正常生命周期的一部分将是不断的新视图?这是客户/用户特定的事情吗?或者你在谈论“开发期间”? – codenheim 2014-10-28 08:32:39

+0

我的意思是,如果我每次更换控制器(即将其他项目添加到字典中),每次创建新的局部视图时都不必重新启动,或者我错了吗? – user2330270 2014-10-28 08:44:06

+0

因为你已经硬编码了页面列表。无论何时向yoiur字典中添加新条目,都必须重新构建应用程序。 – tarzanbappa 2014-10-28 11:29:32

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

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

而不必硬编码字典尝试这样的......

在你的控制器..

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(); 
} 

这可能不是确切的答案尝试这样的事情......

+0

然后添加一个PartialView不需要重建吗? :)感谢 – user2330270 2014-10-28 13:02:11

+0

因为你的页面名称在db中你不需要重建。但是,如果您需要在控制器中为该特定局部视图提供新的不同服务器端逻辑,则必须编写服务器端代码并​​重新编译。 – tarzanbappa 2014-10-28 14:22:53

+0

如果这些部分视图包含一些静态数据,或者通过在控制器中使用预定义操作将内容填充到客户端(ajax/javascript),则不需要重建应用程序。 – tarzanbappa 2014-10-28 14:25:19