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

Шаблон MVC из папки, отличной от стандартной (EditorTemplates/DisplayTemplates)?

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

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

~\Views\Order\ProductModel.cshtml

Как я могу передать шаблон EditorFor для использования этого имени tempalte?

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

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

~\Views\Order\DisplayTemplates\ProductModel.cshtml

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

@Html.DisplayFor(m => m.MyProductModelProperty)