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 vais le faire
<%= Html.TextBox("Name", Model.Name) %>
or
<%= Html.TextBoxFor(x => x.Name) %>
Cependant, le problème est que les rendra name="Nom" alors que j'ai besoin d'avoir name="Enfant.Le nom de" modèle de classeur pour fonctionner correctement. Ou, nom="Enfant2.Le nom de" quand j'ai rendu la deuxième propriété à l'aide de la même vue partielle.
Comment puis-je faire ma vue partielle de reconnaître 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 pour la rendre de manière récursive. Est-il un moyen de rendre les vues partielles avec un préfixe, ou, encore mieux, avec l'automatique reconition de l'appel de la lambda expression, afin que les
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
ajoutera automatiquement correcte "de l'Enfant." préfixe pour le nom généré par/id cordes?
Je peux accepter n'importe quelle solution, y compris la 3 ème partie de la vue des moteurs et des bibliothèques - je réellement utiliser Allumage du Moteur d'Affichage (j' "résoudre" le problème à l'aide de ses macros) et MvcContrib, mais ne pas y trouver une solution. XForms, InputBuilder, MVC v2 - n'importe quel outil/insight qui offrent cette fonctionnalité sera grande.
Actuellement, je pense que ce codage moi-même, mais il semble comme une perte de temps, je ne crois pas que ce choses triviales, n'est pas mis en œuvre déjà.
Beaucoup de manuel des solutions existent, et elles sont toutes les bienvenues. Par exemple, je peux forcer mes partiels d'être basé sur IPartialViewModel<T> { public string Prefix; T Modèle; }. Mais je préfère la préfère certains/solution approuvée.
Mise à JOUR: il y a une question similaire, avec pas de réponse ici.