mvc和partials是不是打破了mvc模式?

时间:2010-02-25 14:36:16

标签: asp.net-mvc

我有一个部分视图,显示搜索选项,如按类别,区域,日期等搜索。这存在于每个页面上。 partial使用包含region,cats等列表的viewmodel。

由于这是在每个页面上使用 - 我必须在我的控制器中的每个操作中在viewmodel上加载这些属性,以确保数据可用于局部视图。对此并不满意。 (简单地使用了继承的viewmodels)

我看到partial可以在控制器上调用一个renderaction方法来获取数据,但现在我有一个视图从控制器调用数据 - 打破mvc模式。

在这种情况下其他人在做什么?

2 个答案:

答案 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动作一样以高速缓存输出。

希望这有帮助。