RenderPartial представление из другого контроллера (и в другой папке)
Я две сущности базы данных, которые мне нужно представить, и мне нужно вывести их на одной странице.
У меня есть что-то вроде этого
Представления Def ViewA ViewB Test 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 ответа
Это работает для меня!
@Html.Partial("~/Views/NewsFeeds/NewsFeedPartial.cshtml")
Вы можете ссылаться на представления с полными путями, например:
Html.RenderPartial("~/Views/Definition/DefinitionDetails")
Более того, используйте библиотеку T4MVC, которая выполняет вышесказанное и делает ее (квази) строго типизированной. Вы можете ссылаться на любое представление из любого контроллера или представления. Вы используете это так:
Html.RenderPartial(MVC.Definition.Views.DefinitionDetails)
или же
Html.RenderPartial(MVC.Definition.Views.DefinitionDetails, myModel)
Просто чтобы уточнить, какие варианты работают точно:
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")
Примечание: по- видимому RenderPartial
немного быстрее чем Partial
, но я также ожидаю, что полностью исправленные имена будут быстрее, чем позволить MVC искать файл.
Если вы создаете партиалы в цикле (т.е. из коллекции в вашей модели представления), вполне вероятно, что вам нужно будет пройти через определенные модели представления:
например
@foreach (var group in orderedGroups)
{
Html.RenderPartial("~/Views/ControllerName/ViewName.cshtml", group);
}
Я просто должен был сделать все это на проекте и нашел отмеченный ответ немного вводящим в заблуждение.
Не могли бы вы скопировать части в общую папку, а затем просто:
<% Html.RenderPartial("DefinitionDetails", i); %>
а также
<% Html.RenderPartial("DefinitionEditActions"); %>