web-dev-qa-db-fra.com

Modèle MVC à partir du dossier autre que Par défaut (EditTorTemplates / DisplayTemplates)?

Pouvez-vous pointer MVC à un dossier autre que les par défaut (Vues/Partager/EditTorTorplates et vues/PARTAGE/DISPLAYTemplates)? J'aimerais soit les mettre dans des sous-dossiers sous ceux-ci, soit dans d'autres dossiers en dehors du dossier partagé.

Par exemple, si j'ai un modèle d'éditeur dans ce dossier:

~\Vues\ordre\producteurModel.cshtml

Comment puis-je dire à mon modèle d'éditeur d'utiliser ce nom de tempalte?

J'ai essayé de le qualifier pleinement, mais cela ne fonctionne pas:

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

J'ai essayé d'utiliser des barres obliques et des backslashes, avec/sans .chstml, chaque combinaison que je peux penser. Je commence à penser que cela n'est pas pris en charge, mais je ne peux pas imaginer pourquoi ce ne serait pas.

43
Jerad Rose

Non, je crains que vous ne puissiez pas faire cela.

Par exemple, si j'ai un modèle d'éditeur dans ce dossier

Ce n'est plus un modèle d'éditeur. C'est une partielle. Si vous souhaitez partager des modèles d'éditeur entre différents contrôleurs, vous pouvez simplement les mettre à l'intérieur de l'~/Views/Shared/EditorTemplates dossier.

En ce qui concerne les sous-dossiers, vous pouvez le faire:

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

qui rendra le ~/Views/CurrentController/EditorTemplates/Order/ProductModel.cshtml ou ~/Views/Shared/EditorTemplates/Order/ProductModel.cshtml Modèle de rédaction.

54
Darin Dimitrov

Vieille question, mais ... une bonne façon d'ajouter un modèle d'affichage/éditeur pour un contrôleur spécifique est de l'ajouter dans DisplayTemplates ou EditorTemplates sous-dossier.

En supposant que, dans votre exemple, vous avez OrderController, vous pouvez simplement mettre un modèle d'affichage pour votre modèle dans le sous-dossier, comme celui-ci:

~\Views\Order\DisplayTemplates\ProductModel.cshtml

Ensuite, Template d'affichage d'appel Normalement à partir de votre vue (ex: de `\ vues\commander\index.cshtml):

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

Si tu fais ça:

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

il n'étilisera pas FOO en tant que collection et appliquez votre modèle d'éditeur à chaque article. Il préférera supposer que votre modèle de rédaction devrait être appliqué à la collection dans son ensemble.

Si vous souhaitez appliquer un modèle d'éditeur à chaque article individuellement, placez-le dans le dossier EditorTemplates dans votre dossier View (car il aura préséance) et utiliser la syntaxe par défaut:

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

Bien sûr, le nom du modèle de l'éditeur doit correspondre au type d'éléments de votre collection.

3
lukeguy