C# 如何最好地管理除母版页以外的页面上的重复部分

C# 如何最好地管理除母版页以外的页面上的重复部分,c#,asp.net-mvc,C#,Asp.net Mvc,在MVC中,您的布局有母版页,您可以为网站的可重用部分创建部分视图 局部视图的问题是,在每个控制器操作中,模型都必须具有传递到局部视图所需的所有属性/数据。这没什么大不了的,但是如果你有很多partials的话,有时候会变得很麻烦 还有什么其他选择 控制器不需要为每个部分准备顶级模型中的所有(甚至任何)数据。调用方本身可以很好地准备模型: @Html.Partial("QuestionView", new Topic { Question="Why", Answer = "Because"})

在MVC中,您的布局有母版页,您可以为网站的可重用部分创建部分视图

局部视图的问题是,在每个控制器操作中,模型都必须具有传递到局部视图所需的所有属性/数据。这没什么大不了的,但是如果你有很多partials的话,有时候会变得很麻烦


还有什么其他选择

控制器不需要为每个部分准备顶级模型中的所有(甚至任何)数据。调用方本身可以很好地准备模型:

 @Html.Partial("QuestionView", new Topic { Question="Why", Answer = "Because"});
您还可以从视图中调用任何其他控制器操作,并传递您喜欢的任何数据:

 @Html.Action("Left", controllerName:"Arrows", 
      routeValues: new {ArrowLength = 5});

 class ArrowsController
 {
    [ChildAction] // add this if never called as top level action via url
    ActionResult Left(int arrowLength)
    { ....
         return View("Arrow", new ArrowModel(ArrowDir.Left, arrowLength * 7);
    }

ASP.Net MVC高达5的唯一真正问题是,您无法从视图中进行适当的
异步调用,就像您的部分视图或子操作需要查询远程数据库或服务一样,您基本上必须从顶级控制器进行调用。vNext中的View components取消了这一限制。

您能提供部分视图不符合预期的示例吗?@Eckert并不是因为它不符合我的预期,所以我的页面上有5个组件,我现在必须加载这5个组件的所有数据,并将其添加到每个模型中。然后在每一页上,我都必须设置这些部分并为它们传递模型。正如Alexei指出的,您应该使用子操作。另外,不要称它们为“母版页”。这仅适用于Web表单,而且由于MVC可以处理Web表单,因此在谈到布局时会混淆您的意思。当我调用Html.Action时,它是否发出单独的http请求?抱歉,我不确定我是否理解,如果我的childAction需要查询数据库,我目前无法这样做?@Coolbree:不是单独的请求,不。尽管它仍然通过MVC路由管道。@Coolbreese:您可以在子操作中执行正常操作中可以执行的任何操作。你就是不能异步完成。换句话说,对于实体框架,您只能使用类似于
SingleOrDefault
,而不是
SingleOrDefaultAsync
@coolbreeze:not请求本身。这不像页面上的AJAX实际发出请求并等待响应。它通过路由框架,像请求一样处理,但没有网络通信,也没有延迟。