| 

.NET C# Java Javascript Exception

2
Unter ASP.NET Web Forms war es problemlos möglich, der Controls-Collection zur Laufzeit beliebige Controls hinzuzufügen, Controls zu ändern oder sie gar zu entfernen, um Forms dynamisch anzupassen.

Wie mache ich etwas derartiges mit ASP.NET MVC?

Unabhängig, ob ich die Web Forms Viewengine oder Razor nehme, habe ich ja das Problem, dass die View letztlich nur ein statisches Template mit if und foreach ist. Wie mache ich so etwas also?

Und - wie gehe ich mit den zurückkommenden Werten um? Also, angenommen, ich erzeuge dynamisch eine Textbox, gebe diese mit aus - wie bekomme ich die nachher wieder eingelesen?
News:
21.01.2011
Golo Roden 2,7k 3 9
1 Antwort
5
So, inzwischen habe ich die Antwort selbst herausgefunden:

1. Es gibt - so weit ich ermitteln konnte - keinen wirklich eleganten, eingebauten und offiziellen Weg, dieses Ziel zu erreichen. Das Problem ist schlichtweg, dass es so etwas wie Controls nicht gibt, weshalb man sie auch nicht dynamisch erzeugen kann.

2. Es gibt drei gängige Workarounds:

2.a) Jede Eventualität im Template vorsehen und das Template mit zig if-Abfragen zukleistern.
2.b) Einen HtmlHelper schreiben, der dynamisch HTML erzeugt.
2.c) Dem Model eine Eigenschaft hinzufügen, die das HTML dynamisch erzeugt.

Alle drei Wege haben ihre Vor- und Nachteile, der sauberste scheint mit noch 2.b) zu sein, weil die HTML-Erzeugung dann wenigstens in einer UI-Logik-Komponente gekapselt ist, das Template aber trotzdem übersichtlich bleibt.

Was außerdem an dieser Vorgehensweise ganz praktisch ist: Man kann in seinem eigenen HtmlHelper bereits vorhandene aufrufen - also beispielsweise auch Html.Partial, womit man zB dynamisch entscheiden kann, welche Partial View inkludiert werden soll, ohne das eigentliche Template mit zig if-Anweisungen zu überladen.

Gibt der Benutzer Werte ein, kann ASP.NET MVC diese logischerweise nicht automatisch zuordnen, da für die dynamisch erzeugten "Controls" keine gleichnamigen Variablen existieren - aber man kann über Request.Form auf alle eingegebenen Werte zugreifen und sich das Mapping auf diese Weise selbst bauen. An dieser Stelle kann man dann auch Validierung & Co einklinken.

Alles nicht perfekt, aber besser als nichts.
23.01.2011
Golo Roden 2,7k 3 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH