Wer weiß, wie Sie eine funktionale Entsprechung zu Html.EditorFor() vom Controller aufrufen können?Code entspricht für Html.EditorFor()
Ich habe eine Standardtabelle in meiner Ansicht. Die Zeilen verwenden eine EditorTemplate
<table id="tableOfBar">
<tfoot>
<tr><td colspan="2">Some paging controls and whatnot</td></tr>
</tfoot>
<tbody>
<% for (int i=0;i<Model.Rows.Count();i++)
{
int j = i;
%><%: Html.EditorFor(m => m.Rows[j], "FooRowTemplate", "Rows["+j+"]", new { OtherViewDataStuff})%>
</tbody>
</table>
Der Editor Vorlage ist eine stark typisierte Teilansicht, die die <tr>
und untergeordneten Elemente zurückgibt.
All dies funktioniert gut, aber der nächste Schritt ist eine Schaltfläche "Zeile hinzufügen" hinzuzufügen. Aus einer Reihe von Gründen, die hier nicht berücksichtigt werden, möchte ich eher den Server als eine rein clientseitige Lösung ansprechen. Was ich versuche, ist, das EditorTemplate als Teilansicht zurückzugeben und JavaScript zu verwenden, das Html zurückgab und an die Tabelle anhängt.
[HttpPost]
public ActionResult AddRow(FooModel model)
{
var row = new FooRowModel();
model.AddRow(row);
var index = model.Rows.IndexOf(row);
return PartialView("~/Areas/MyArea/Views/Shared/EditorTemplates/FooRowTemplate.ascx", model.Rows[index]);
}
Alles, was gut funktioniert, außer die Eingabe Namensgebung. Der fehlende Teil ist das Sammlungs-Präfix, das dem Modellbinder sagt, wie das Modell beim Post-Back wieder zusammengesetzt werden soll. Auf der View-Seite können Sie angeben, was dies sein soll (das ist der "Rows["+j+"]"
-Teil des obigen Aufrufs EditorFor()
).
Können Sie eine Teilansicht einen HTML-Feldnamen Präfix wie mit EditorFor() geben? Irgendwelche Gedanken darüber, wie das funktioniert? Mein ganzer Ansatz mag völlig falsch sein, das ist in Ordnung. Sag mir einfach warum. :)
Danke für Ihre Hilfe.