我有一个局部视图,显示按类别,区域,日期等搜索选项。这存在于每个页面上。部分使用包含区域,猫等列表的视图模型mvc和partials是不是打破了mvc模式?
由于这是每个页面上使用 - 我必须在我的控制器中的每个操作的视图模型上加载这些属性,以确保数据可用于部分视图。不那么高兴。 (简单地使用继承的viewmodels)
我看到partial可以调用控制器上的renderaction方法来获取数据,但是现在我将有一个视图调用控制器的数据 - 打破mvc模式。
其他人在这种情况下做什么?
我有一个局部视图,显示按类别,区域,日期等搜索选项。这存在于每个页面上。部分使用包含区域,猫等列表的视图模型mvc和partials是不是打破了mvc模式?
由于这是每个页面上使用 - 我必须在我的控制器中的每个操作的视图模型上加载这些属性,以确保数据可用于部分视图。不那么高兴。 (简单地使用继承的viewmodels)
我看到partial可以调用控制器上的renderaction方法来获取数据,但是现在我将有一个视图调用控制器的数据 - 打破mvc模式。
其他人在这种情况下做什么?
您可以使用自定义ActionFilters将常用功能注入到您的动作/控制器,以避免重复相同的代码。
例如:
public class RequiresSearchOptions : ActionFilterAttribute {
public override void OnResultExecuting(ResultExecutingContext filterContext){
filterContext.Controller.ViewData["SearchOptions"] =
GetSearchOptions();
//Or manipulate the model :
//YourViewModel m =
// (YourViewModel)filterContext.Controller.ViewData.Model;
//m.SearchOptions = GetSearchOptions();
}
}
然后装点你的行动/控制器。
[RequiresSearchOptions]
public ActionResult Index() {
return View();
}
//or
[RequiresSearchOptions]
public class HomeController : Controller {
//Actions
}
有段时间我用partial requests渲染重用的小部件。在我看来,它们是一种更复杂的RenderAction渲染小部件的MVC方式,因为它们不需要View来知道正在调用哪个动作。
我的部分请求会渲染部分视图,因此您的现有代码可以轻松迁移。它们也可以以与任何asp.net mvc动作相同的方式输出缓存。
希望这会有所帮助。