Supposons que j'ai ViewModel comme
public class AnotherViewModel
{
public string Name { get; set; }
}
public class MyViewModel
{
public string Name { get; set; }
public AnotherViewModel Child { get; set; }
public AnotherViewModel Child2 { get; set; }
}
Dans la vue, je peux rendre un partiel avec
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
Dans le partiel je ferai
<%= Html.TextBox("Name", Model.Name) %>
or
<%= Html.TextBoxFor(x => x.Name) %>
Cependant, le problème est que les deux rendront name = "Name" alors que j'ai besoin d'avoir name = "Child.Name" pour que le classeur de modèle fonctionne correctement. Ou, name = "Child2.Name" lorsque je rend la deuxième propriété en utilisant la même vue partielle.
Comment faire pour que ma vue partielle reconnaisse automatiquement le préfixe requis? Je peux le passer en paramètre mais c'est trop gênant. C'est encore pire quand je veux par exemple le rendre récursif. Existe-t-il un moyen de rendre des vues partielles avec un préfixe, ou, mieux encore, avec une reconition automatique de l'expression lambda appelante de sorte que
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
ajoutera automatiquement un "enfant" correct. préfixe aux chaînes de nom / id générées?
Je peux accepter n'importe quelle solution, y compris les moteurs de visualisation tiers et les bibliothèques - j'utilise en fait Spark View Engine (je «résous» le problème en utilisant ses macros) et MvcContrib, mais je n'y ai pas trouvé de solution. XForms, InputBuilder, MVC v2 - tout outil / aperçu qui fournit cette fonctionnalité sera génial.
Actuellement, je pense à le coder moi-même, mais cela semble être une perte de temps, je ne peux pas croire que ce truc trivial ne soit pas déjà implémenté.
De nombreuses solutions manuelles peuvent exister et toutes sont les bienvenues. Par exemple, je peux forcer mes partiels à être basés sur IPartialViewModel <T> {public string Prefix; Modèle T; }. Mais je préfère une solution existante / approuvée.
MISE À JOUR: il y a une question similaire sans réponse ici .
helper.ViewData.TemplateInfo.HtmlFieldPrefix
sous la forme{oldprefix}.{newprefix}