Подтвердить что ты не робот

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

Спасибо за помощь

4b9b3361

Ответ 1

это работает для меня!

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

Ответ 2

Вы можете ссылаться на Views с полными путями, например:

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

Еще лучше, используйте T4MVC library, что делает вышеизложенное и делает его (quasi-) строго типизированным. Вы можете ссылаться на любой вид с любого контроллера или просмотра. Вы используете его следующим образом:

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

или

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

Ответ 3

Просто чтобы уточнить, какие параметры работают точно:

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

Я просто должен был сделать все это в проекте и нашел заметный ответ немного ошибочным.

Ответ 4

Не могли бы вы скопировать частичные файлы в общую папку, а затем просто:

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

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