多个控制器的MVC局部视图或基本视图模型显示相同的数据?

时间:2017-01-24 11:42:05

标签: c# asp.net-mvc model-view-controller asp.net-mvc-5

我(最终)从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
}

在我将创建的每个控制器中。

什么是最好的实践?建议? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

a)2017年我强烈建议你看看angular.js或反应js

b)如果没有,请将jQuery添加到项目中。创建一个部分,将$(document).ready()调用一个将提供4个项目的操作。 此代码只存在一次,无处不在。