RenderPartial来自另一个控制器(以及另一个文件夹)的视图

Geo*_*lva 25 asp.net-mvc renderpartial

我需要表示两个数据库实体,我需要在一个页面中输出它们.

我有类似的东西

视图Def ViewA ViewB测试ViewC

我希望ViewC显示ViewA,它显示ViewB.

现在我正在使用这样的东西:

// View C
<!-- bla -->
<% Html.RenderPartial(Url.Content("../Definition/DefinitionDetails"), i); %>


// View A
<!-- bla -->
<% Html.RenderPartial(Url.Content("../Definition/DefinitionEditActions")); %>
Run Code Online (Sandbox Code Playgroud)

这样做有好处吗?我发现用相对路径名链接会烧掉你.有小费吗?

我有机会像...那样做些什么

Html.RenderPartial( "定义", "DefinitionDetails",i)的; ?

谢谢您的帮助

小智 46

这对我有用!

@Html.Partial("~/Views/NewsFeeds/NewsFeedPartial.cshtml")
Run Code Online (Sandbox Code Playgroud)


Mat*_*man 34

您可以参考具有完整路径的视图,例如:

Html.RenderPartial("~/Views/Definition/DefinitionDetails")
Run Code Online (Sandbox Code Playgroud)

更好的是,使用T4MVC库,它执行上述操作并使其(准)强类型.您可以从任何控制器或视图引用任何视图.你这样使用它:

Html.RenderPartial(MVC.Definition.Views.DefinitionDetails)
Run Code Online (Sandbox Code Playgroud)

要么

Html.RenderPartial(MVC.Definition.Views.DefinitionDetails, myModel)
Run Code Online (Sandbox Code Playgroud)

  • 我发现你必须使用第一种方法将'.ascx'添加到路径的末尾.(这可能仅适用于特定的项目设置) (4认同)
  • 是的我试过第一种方法会产生错误,它应该有文件扩展名.所以它应该是`Html.RenderPartial("〜/ Views/Controller/Action.ext")`其中ext可以是aspx,ascx,cshtml或vbhtml. (3认同)
  • 仅仅指出,我们在讨论`System.Web.Mvc.Html.RenderPartialExtenstions`中的`Html.RenderPartial`重载而不是`MvcContrib.UI.InputBuilder.Views.HtmlExtensions`和`Microsoft.Web.Mvc.Html. HtmlHelperExtensions`.有时Resharper会给你太多选择. (2认同)

Gon*_*ing 11

只是为了澄清哪些选项完全正常:

1)如果提供路径,则需要扩展视图文件.

2)如果您不提供路径,请不要提供扩展.

以下示例假设cshtml文件.

使用RenderPartial一个代码块:

// This looks in default view folder, then shared, checking for .aspx, .cshtml etc
Html.RenderPartial("DefinitionDetails"); 

// This looks in specified path and requires the extension
Html.RenderPartial("~/Views/Definition/DefinitionDetails.cshtml");
Run Code Online (Sandbox Code Playgroud)

使用Partial内联剃刀语法:

// This looks in default view folder, then shared, checking for .aspx, .cshtml etc
@Html.Partial("DefinitionDetails")

// This looks in specified path and requires the extension
@Html.Partial("~/Views/Definition/DefinitionDetails.cshtml")
Run Code Online (Sandbox Code Playgroud)

注意:显然RenderPartial比稍快一点Partial,但我也希望完全修改的名称比让MVC搜索文件更快.

如果要在循环中生成partials(即从视图模型中的集合中生成),则可能需要通过特定的viewmodel:

例如

   @foreach (var group in orderedGroups)
   {
       Html.RenderPartial("~/Views/ControllerName/ViewName.cshtml", group);
   }
Run Code Online (Sandbox Code Playgroud)

我只需要在一个项目上完成所有这些工作,并发现标记的答案有点误导.