Asp.net mvc 从另一个控制器(以及在另一个文件夹中)渲染部分视图

Asp.net mvc 从另一个控制器(以及在另一个文件夹中)渲染部分视图,asp.net-mvc,renderpartial,Asp.net Mvc,Renderpartial,我需要表示两个数据库实体,并在单个页面中输出它们 我有类似的东西 观点 Def 维瓦 视图b 试验 ViewC 我想用ViewC显示ViewA,它显示ViewB 现在我用的是这样的东西: // View C <!-- bla --> <% Html.RenderPartial(Url.Content("../Definition/DefinitionDetails"), i); %> // View A <!-- bla --> <% Html.Re

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

我有类似的东西

观点 Def 维瓦 视图b 试验 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(MVC.Definition.Views.DefinitionDetails)
//查看C
//查看A
有没有更好的办法?我发现用相对路径名链接会烧死你。 有什么建议吗

有没有可能我可以做一些像

RenderPartial(“定义”,“定义细节”,i)


感谢您的帮助

您不能将部分内容复制到共享文件夹中,然后只需执行以下操作:


您可以引用具有完整路径的视图,如:

Html.RenderPartial("~/Views/Definition/DefinitionDetails")
更好的是,使用,它可以实现上述功能并使其(准)强类型化。您可以从任何控制器或视图引用任何视图。您可以这样使用它:

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


// View A
<!-- bla -->
<% Html.RenderPartial(Url.Content("../Definition/DefinitionEditActions")); %>
Html.RenderPartial(MVC.Definition.Views.DefinitionDetails)

这是我的工作

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

只是为了澄清哪些选项确实有效:

1) 如果提供路径,则需要视图文件的扩展名。 2) 如果不提供路径,请不要提供扩展名。 下面的示例假定为cshtml文件

在代码块中使用
RenderPartial
: 使用
Partial
进行内联语法: 注意:显然,
RenderPartial
Partial
稍微快一点,但我也希望完全路径名称比让MVC搜索文件快一点

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

例如
我只是在一个项目上做了所有这些,发现标记的答案有点误导。

鉴于您希望从多个控制器访问视图,我会这么说。我发现您必须使用第一种方法将“.ascx”添加到路径的末尾。(这可能只是针对特定的项目设置)只是为了说明,我们正在讨论
System.Web.Mvc.Html.renderPartialExtensions中的
Html.RenderPartial
重载,而不是
MvcContrib.UI.InputBuilder.Views.HtmlExtensions
Microsoft.Web.Mvc.Html.HtmlHelperExtensions
。有时Resharper会给你太多的选择。是的,我尝试了第一种方法会产生错误,它应该有文件扩展名。因此,它应该是
Html.RenderPartial(“~/Views/Controller/Action.ext”)
,其中ext可以是aspx、ascx、cshtml或vbhtml。这个答案并不正确。如果提供路径,则还需要提供扩展。如果不提供路径,则不能提供扩展名。下面添加了详细信息回答以澄清选项。是@callmelan you is right first方法给出了一个错误“未找到部分视图”~/Views/Definition/DefinitionDetails”,可以通过在末尾添加ext将其删除。为什么当它位于其他控制器文件夹上时,它需要放置*.cshtml?我可以使用Html.RenderPartial吗(“~/Views/Definition/DefinitionDetails.cshtml”,model)用于生成字符串的实际方法?@HimalayaGarg它只是一个函数。您可以使用任何以相同方式返回字符串的函数:)
// 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")
   @foreach (var group in orderedGroups)
   {
       Html.RenderPartial("~/Views/ControllerName/ViewName.cshtml", group);
   }