代码之家  ›  专栏  ›  技术社区  ›  Samuel Goldenbaum

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

  •  0
  • Samuel Goldenbaum  · 技术社区  · 16 年前

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

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

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

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

    2 回复  |  直到 16 年前
        1
  •  2
  •   Çağdaş Tekin    16 年前

    您可以使用自定义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
    }
    
        2
  •  1
  •   madcapnmckay    16 年前

    有一段时间我用过 partial requests 呈现重用的小部件。在我看来,它们是一种更具MVC风格的呈现小部件的方式,而不是呈现操作,因为它们不需要视图知道调用了什么操作。

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