asp.net mvc - route - Plantilla MVC de una carpeta distinta de la predeterminada(EditorTemplates/DisplayTemplates)?
tag helpers asp net core (3)
No, me temo que no puedes hacer esto.
Por ejemplo, si tengo una plantilla de editor debajo de esta carpeta
Eso ya no es una plantilla de editor. Es un parcial. Si desea compartir plantillas de editor entre diferentes controladores, simplemente puede ponerlos dentro de la carpeta ~/Views/Shared/EditorTemplates
.
En lo que respecta a las subcarpetas, podrías hacer esto:
@Html.EditorFor(x => x.Foo, "Order/ProductModel")
que renderizará la plantilla del editor ~/Views/CurrentController/EditorTemplates/Order/ProductModel.cshtml
o ~/Views/Shared/EditorTemplates/Order/ProductModel.cshtml
.
¿Puede apuntar MVC a una carpeta que no sea la predeterminada (Views / Shared / EditorTemplates & Views / Shared / DisplayTemplates)? Me gustaría ponerlos en subcarpetas debajo de esos, o en otras carpetas fuera de la carpeta compartida.
Por ejemplo, si tengo una plantilla de editor debajo de esta carpeta:
~ / Views / Order / ProductModel.cshtml
¿Cómo puedo decirle a mi plantilla EditorFor que use este nombre de tempalte?
Intenté calificarlo completamente, pero esto no funciona:
@Html.EditorFor(m => m.ProductModel, @"~/Views/Order/ProductModel.cshtml")
Intenté usar barras diagonales y barras diagonales inversas, con / sin .chstml, cada combinación que se me ocurre. Estoy empezando a pensar que esto no es compatible, pero no puedo imaginar por qué no lo será.
Pregunta anterior, pero ... la forma correcta de agregar una plantilla de pantalla / editor para un controlador específico es agregarla en la subcarpeta DisplayTemplates
o EditorTemplates
.
Suponiendo que, en su ejemplo, tiene OrderController
, puede simplemente poner la plantilla de visualización para su modelo en una subcarpeta, como esta:
~/Views/Order/DisplayTemplates/ProductModel.cshtml
A continuación, llame a la plantilla de visualización normalmente desde su vista (por ejemplo: desde `~ / Views / Order / Index.cshtml):
@Html.DisplayFor(m => m.MyProductModelProperty)
Si haces esto:
@Html.EditorFor(x => x.Foo, "Order/ProductModel")
no analizará Foo como una colección y aplicará su plantilla de editor a cada elemento. Más bien asumirá que su plantilla de editor debe aplicarse a la colección como un todo.
Si desea aplicar una plantilla de editor a cada elemento individualmente, simplemente colóquelo en la carpeta EditorTemplates debajo de su carpeta de visualización (ya que tendrá prioridad) y use la sintaxis predeterminada:
@Html.EditorFor(x => x.Foo)
Por supuesto, el nombre de la plantilla del editor debe coincidir con el tipo de elementos en su colección.