Angenommen, ich habe ViewModel wie
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; }
}
In der Ansicht kann ich einen Teil mit rendern
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
Im Teil werde ich tun
<%= Html.TextBox("Name", Model.Name) %>
or
<%= Html.TextBoxFor(x => x.Name) %>
Das Problem ist jedoch, dass beide name = "Name" rendern, während name = "Child.Name" erforderlich ist, damit der Modellordner ordnungsgemäß funktioniert. Oder name = "Child2.Name", wenn ich die zweite Eigenschaft mit derselben Teilansicht rendere.
Wie lasse ich meine Teilansicht das erforderliche Präfix automatisch erkennen? Ich kann es als Parameter übergeben, aber das ist zu unpraktisch. Dies ist noch schlimmer, wenn ich es beispielsweise rekursiv rendern möchte. Gibt es eine Möglichkeit, Teilansichten mit einem Präfix oder, noch besser, mit einer automatischen Neukonfiguration des aufrufenden Lambda-Ausdrucks zu rendern?
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
fügt automatisch das richtige "Kind" hinzu. Präfix zu den generierten Name / ID-Zeichenfolgen?
Ich kann jede Lösung akzeptieren, einschließlich View Engine und Bibliotheken von Drittanbietern. Ich verwende tatsächlich Spark View Engine (ich "löse" das Problem mithilfe seiner Makros) und MvcContrib, habe dort jedoch keine Lösung gefunden. XForms, InputBuilder, MVC v2 - jedes Tool / jede Erkenntnis, die diese Funktionalität bietet, ist großartig.
Momentan denke ich darüber nach, dies selbst zu codieren, aber es scheint Zeitverschwendung zu sein. Ich kann nicht glauben, dass dieses triviale Zeug noch nicht implementiert ist.
Möglicherweise gibt es viele manuelle Lösungen, und alle sind willkommen. Zum Beispiel kann ich erzwingen, dass meine Partials auf IPartialViewModel <T> {public string Prefix; T-Modell; }. Aber ich würde lieber eine bestehende / genehmigte Lösung bevorzugen.
UPDATE: es gibt eine ähnliche Frage ohne Antwort hier .
helper.ViewData.TemplateInfo.HtmlFieldPrefix
in Form von{oldprefix}.{newprefix}