Шаблон MVC из папки, отличной от стандартной (EditorTemplates / DisplayTemplates)? - PullRequest
42 голосов
/ 21 октября 2011

Можете ли вы указать MVC на папку, отличную от папки по умолчанию (Views / Shared / EditorTemplates & Views / Shared / DisplayTemplates)?Я бы хотел поместить их в подпапки ниже этих или в другие папки вне общей папки.

Например, если у меня есть шаблон редактора в этой папке:

~ \ Views \ Order \ ProductModel.cshtml

Как мне сказать, чтобы мой шаблон EditorFor использовал это временное имя?

Я попытался полностью его квалифицировать, но это не работает:

@Html.EditorFor(m => m.ProductModel, @"~\Views\Order\ProductModel.cshtml")

Я пытался использовать прямую и обратную косую черту, с / без .chstml, каждую комбинацию, которую я могу придумать.Я начинаю думать, что это не поддерживается, но я не могу представить, почему это не будет.

Ответы [ 3 ]

52 голосов
/ 21 октября 2011

Нет, боюсь, вы не можете этого сделать.

Например, если у меня есть шаблон редактора в этой папке

Это больше не редакторшаблон.Это частичное.Если вы хотите обмениваться шаблонами редактора между различными контроллерами, вы можете просто поместить их в папку ~/Views/Shared/EditorTemplates.

Что касается подпапок, то вы можете сделать это:

@Html.EditorFor(x => x.Foo, "Order/ProductModel")

, которыйотобразит шаблон редактора ~/Views/CurrentController/EditorTemplates/Order/ProductModel.cshtml или ~/Views/Shared/EditorTemplates/Order/ProductModel.cshtml.

4 голосов
/ 18 мая 2015

Старый вопрос, но ... правильный способ добавить шаблон отображения / редактирования для конкретного контроллера - добавить его в подпапку DisplayTemplates или EditorTemplates.

Предполагая, что в вашем примере у вас есть OrderController, вы можете просто поместить шаблон отображения для вашей модели в подпапку, например:

~\Views\Order\DisplayTemplates\ProductModel.cshtml

Затем, как обычно, вызовите шаблон отображения из вашего представления (например, из `~ \ Views \ Order \ Index.cshtml):

@Html.DisplayFor(m => m.MyProductModelProperty)
3 голосов
/ 05 августа 2012

Если вы сделаете это:

@Html.EditorFor(x => x.Foo, "Order/ProductModel")

это не будет анализировать Foo как коллекцию и применять ваш шаблон редактора к каждому элементу. Предполагается, что ваш шаблон редактора должен быть применен ко всей коллекции.

Если вы хотите применить шаблон редактора к каждому элементу по отдельности, просто поместите его в папку EditorTemplates в папке вашего представления (так как она будет иметь приоритет) и используйте синтаксис по умолчанию:

@Html.EditorFor(x => x.Foo)

Конечно, имя шаблона редактора должно соответствовать типу элементов в вашей коллекции.

...