【发布时间】:2010-04-02 18:08:34
【问题描述】:
我刚刚完成了我的第一个 ASP.NET MVC (2) CMS。下一步是建立网站,显示来自 CMS 数据库的数据。这是网站设计:
http://img56.imageshack.us/img56/4676/portal.gif http://img56.imageshack.us/img56/4676/portal.gif
#1(红框) - 显示文章类别。视图模型:
public class CategoriesDisplay
{
public CategoriesDisplay() { }
public int CategoryID { set; get; }
public string CategoryTitle { set; get; }
}
#2(棕色框) - 显示最后 x 篇文章;跳过绿框 #3 中的那些。视图模型:
public class ArticleDisplay
{
public ArticleDisplay() { }
public int CategoryID { set; get; }
public string CategoryTitle { set; get; }
public int ArticleID { set; get; }
public string ArticleTitle { set; get; }
public string URLArticleTitle { set; get; }
public DateTime ArticleDate;
public string ArticleContent { set; get; }
}
#3(绿色框) - 显示最后 x 篇文章。使用与棕色框 #2 相同的 ViewModel
#4(蓝色框) - 显示即将发生的事件列表。使用 dataContext.Model.Event 作为 ViewModel
方框#1、#2 和#4 将在整个网站上重复出现,它们是母版页的一部分。所以,我的问题是:将这些数据从模型传输到控制器并最终传输到视图页面的最佳方式是什么?
- 我应该为 将所有这些类包装在一起的母版页和 ViewModel 类或
- 我应该为 这些盒子中的每一个,并使每个 其中继承了适当的类 (如果它甚至有可能 以这种方式工作?)或
- 我应该把这个重复的代码放在 所有控制器和所有附加 通过 ViewData 传输数据,其中 可能是更糟糕的方式:) 或者
- 也许有更好的更多 简单的方法,但我不知道/看不到?
提前致谢,
伊莱
编辑:
如果您的答案是#1,那么请解释如何为母版页制作控制器!
编辑 2:
在本教程中描述了如何使用抽象类将数据传递到母版页:http://www.asp.net/LEARN/mvc/tutorial-13-cs.aspx
在“清单 5 – Controllers\MoviesController.cs”中,使用 LINQ 直接从数据库中检索数据,而不是从存储库中检索数据。所以,我想知道这是否只是在本教程中,或者这里有一些技巧并且存储库不能/不应该使用?
【问题讨论】:
-
是否可以在 MVC 中制作强类型母版页?
-
我也想知道这个问题的答案
-
向母版页传递数据的答案在这里:asp.net/LEARN/mvc/tutorial-13-cs.aspx
-
我会为每个部分创建视图、视图模型和操作。然后调用 Html.RenderAction(...)。
-
现在我已经从上面的评论中阅读了这个解决方案,我认为这解决了我的问题。所以,我应该创建一个抽象控制器,将所有重复的数据放入其中,并让所有其他控制器都从它继承,以便该抽象类的所有数据在所有从它继承的控制器中都可用。
标签: asp.net-mvc code-organization