我有一个部分视图,显示搜索选项,如按类别,区域,日期等搜索。这存在于每个页面上。 partial使用包含region,cats等列表的viewmodel。
由于这是在每个页面上使用 - 我必须在我的控制器中的每个操作中在viewmodel上加载这些属性,以确保数据可用于局部视图。对此并不满意。 (简单地使用了继承的viewmodels)
我看到partial可以在控制器上调用一个renderaction方法来获取数据,但现在我有一个视图从控制器调用数据 - 打破mvc模式。
在这种情况下其他人在做什么?
答案 0 :(得分:2)
您可以使用自定义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
}
答案 1 :(得分:1)
有一段时间我使用partial requests来渲染重用的小部件。在我看来,它们是一种更多的MVC渲染小部件而不是RenderAction的方式,因为它们不需要View知道正在调用的动作。
我的部分请求会呈现部分视图,因此您可以轻松迁移现有代码。它们也可以像任何asp.net mvc动作一样以高速缓存输出。
希望这有帮助。