2010-02-25 18 views
0

我有一个局部视图,显示按类别,区域,日期等搜索选项。这存在于每个页面上。部分使用包含区域,猫等列表的视图模型mvc和partials是不是打破了mvc模式?

由于这是每个页面上使用 - 我必须在我的控制器中的每个操作的视图模型上加载这些属性,以确保数据可用于部分视图。不那么高兴。 (简单地使用继承的viewmodels)

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

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

回答

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

有段时间我用partial requests渲染重用的小部件。在我看来,它们是一种更复杂的RenderAction渲染小部件的MVC方式,因为它们不需要View来知道正在调用哪个动作。

我的部分请求会渲染部分视图,因此您的现有代码可以轻松迁移。它们也可以以与任何asp.net mvc动作相同的方式输出缓存。

希望这会有所帮助。