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

Другие вопросы по тегам