RenderPartial a view from another controller (and in another folder)
I two database entities that i need to represent and i need to output them in a single page.
I have something like this
Views Def ViewA ViewB Test ViewC
I want to ViewC to display ViewA, which displays ViewB.
Right now i'm using something like this:
// View C
<!-- bla -->
<% Html.RenderPartial(Url.Content("../Definition/Definit开发者_Python百科ionDetails"), i); %>
// View A
<!-- bla -->
<% Html.RenderPartial(Url.Content("../Definition/DefinitionEditActions")); %>
Is there a better to do this? I find that linking with relative pathnames can burn you. Any tips?
Any chance I can make somehtiing like...
Html.RenderPartial("Definition","DefinitionDetails",i); ?
Thanks for the help
this is works for me!
@Html.Partial("~/Views/NewsFeeds/NewsFeedPartial.cshtml")
You can refer to Views with full paths, like:
Html.RenderPartial("~/Views/Definition/DefinitionDetails")
Even better, use the T4MVC library, which does the above and makes it (quasi-) strongly-typed. You can refer to any view from any controller or view. You use it like this:
Html.RenderPartial(MVC.Definition.Views.DefinitionDetails)
or
Html.RenderPartial(MVC.Definition.Views.DefinitionDetails, myModel)
Just to clarify which options work exactly:
1) The extension of the view file is required if you supply a path.
2) If you do not supply a path, do not supply the extension.
The examples below assume cshtml files.
Use RenderPartial
in a code block:
// 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");
Use Partial
for inline Razor syntax:
// 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")
Note: Apparently RenderPartial
is slightly faster than Partial
, but I also expect fully pathed names will be a faster than letting MVC search for the file.
If you are producing partials in a loop (i.e. from a collection in your view model), it is likely you will need to pass through specific viewmodels:
e.g.
@foreach (var group in orderedGroups)
{
Html.RenderPartial("~/Views/ControllerName/ViewName.cshtml", group);
}
I just had to do all this on a project and found the marked answer a little misleading.
Could you not copy the partials into the shared folder then just do:
<% Html.RenderPartial("DefinitionDetails", i); %>
and
<% Html.RenderPartial("DefinitionEditActions"); %>
精彩评论