我刚刚完成了我的第一个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将在整个网站上重复,它们是Master Page的一部分。所以,我的问题是:将这些数据从模型转移到控制器,最后转移到查看页面的最佳方法是什么?
提前致谢,
ILE
修改
如果您的答案是#1,那么请解释如何为母版页制作控制器!
编辑2:
在本教程中,介绍了如何使用抽象类将数据传递到母版页:http://www.asp.net/LEARN/mvc/tutorial-13-cs.aspx
在“清单5 - Controllers \ MoviesController.cs”中,使用LINQ直接从数据库检索数据,而不是从存储库检索数据。所以,我想知道这是否只是在本教程中,或者这里有一些技巧并且不能/不应该使用存储库?
答案 0 :(得分:4)
要获取数据到我的母版页:
我会为每个部分创建Views,ViewModel和Actions。然后拨打Html.RenderAction(...)
例如:
我只使用redbox的html创建CategoriesDisplay.aspx
。我会通过你的CategoriesDisplay
模型。然后在我的控制器中:
public class CategoryController : Controller
{
public ActionResult DisplayCategories()
{
var model = new CategoriesDisplay();
...
return View(model);
}
}
然后在我的母版页中:
<% Html.RenderAction<CategoryController>(c => c.DisplayCategoreis()); %>
这将在Master Page中内联呈现CategoriesDisplay视图。这反过来又允许您拥有SOC(关注点分离),干净且易于管理的代码。
答案 1 :(得分:2)
我也与此斗争过。最初我做了大量的额外数据转储到ViewData中,最终不得不将其转换回来(做了一些缓解这一点的扩展,但仍然不是很好)。
我会选择#1并制作一个ViewModel来包装你需要的所有类。