我(最终)从WebForms迁移到MVC并且问题正在出现,似乎我找不到一个好的解决方案......
假设我在_layout.cshtml页面中有一个“小部件”,显示已登录用户的最后4条消息。这存在于站点的每个控制器中。
我该怎么办?
a)BaseViewModel:对于每个控制器和每个动作,我必须创建从BaseViewModel继承的特定viewmodel,并在每个控制器中设置数据+ baseviewModel中的最后4个消息:
public ActionResult Index()
{
HomeViewModel h = new HomeViewModel();
h.UserName = "Daniele"; //in BaseViewModel
h.LastMessages = _messagesRepository.GetLastItems(4); //in BaseViewModel
//Other data specific to index page
return View(h);
}
public ActionResult Dashboard()
{
HomeViewModel h = new HomeViewModel();
h.UserName = "Daniele"; //in BaseViewModel
h.LastMessages = _messagesRepository.GetLastItems(4); //in BaseViewModel
//Other data specific to dashboard
return View(h);
}
b)Html动作:似乎是一个更好的解决方案,但在每个控制器中我仍然需要复制和粘贴
[ChildActionOnly]
public PartialViewResult LastMessages()
{
//Code
}
在我将创建的每个控制器中。
什么是最好的实践?建议? 谢谢你的帮助。
答案 0 :(得分:0)
a)2017年我强烈建议你看看angular.js或反应js
b)如果没有,请将jQuery添加到项目中。创建一个部分,将$(document).ready()
调用一个将提供4个项目的操作。
此代码只存在一次,无处不在。