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

时间:2010-05-21 05:21:53

标签: asp.net-mvc renderpartial

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

我有类似的东西

浏览   高清     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")); %>

这样做有好处吗?我发现用相对路径名链接会烧掉你。 有什么提示吗?

任何机会我都可以像......一样......

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

感谢您的帮助

4 个答案:

答案 0 :(得分:45)

这对我有用!

@Html.Partial("~/Views/NewsFeeds/NewsFeedPartial.cshtml")

答案 1 :(得分:34)

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

Html.RenderPartial("~/Views/Definition/DefinitionDetails")

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

Html.RenderPartial(MVC.Definition.Views.DefinitionDetails)

Html.RenderPartial(MVC.Definition.Views.DefinitionDetails, myModel)

答案 2 :(得分:10)

只是为了澄清哪些选项可以正常工作:

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");

使用Partial进行内联Razor语法:

// 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")

注意:显然RenderPartialPartial 略快,但我也希望完全修改后的名称比让MVC搜索文件更快。

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

e.g。

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

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

答案 3 :(得分:1)

您是否可以将部分文件复制到共享文件夹中,然后执行:

<% Html.RenderPartial("DefinitionDetails", i); %>

<% Html.RenderPartial("DefinitionEditActions"); %>