Ich kann nicht herausfinden, wie Modellbindung in Webformularen zu dem Auffüllen einer unterordneten Auflistung eines Ansichtsmodells verwandt wird. Angenommen, ich habe folgendes:ASP.NET Web Forms Modellbindung verschachtelte Auflistung
public class MeasurementViewModel
{
public string Name {get;set;}
public int MeasurementTypeId {get;set;}
public double Value {get;set;}
}
public class ExperimentViewModel
{
public bool ExperimentAorB {get;set;}
public List<MeasurementViewModel> Measurements {get;set;}
}
So gibt es zwei Arten von Experimenten, A oder B, von denen jede einen anderen Satz von Messungen erfordern. Ich möchte dies alles auf einer Seite tun, so dass der Benutzer den Testtyp auswählt und dann die Liste der Messungen anzeigt, die über einfache Textfelder einzugeben sind. Das ist in MVC einfach, aber ich stecke mit Webformularen fest, in denen nicht klar ist, wie das geht.
<asp:DropDownList ID="ddExperiment" runat="server" CssClass="form-control" AutoPostBack="true"
DataValueField="Id" DataTextField="Description"
SelectMethod="ddPartCode_GetData" />
<asp:FormView ID="Entry" RenderOuterTable="false" runat="server" DefaultMode="Insert" Visible="<%# !string.IsNullOrEmpty(ddExperiment.SelectedValue) %>"
ItemType="ExperimentViewModel" SelectMethod="Entry_GetItem" InsertMethod="Entry_InsertItem">
<EditItemTemplate>
<asp:TextBox ID="txtName" Text="<%# BindItem.Name %>" runat="server" />
<!-- ??? -->
</EditItemTemplate>
</asp:FormView>
Das Einsatzverfahren der Formview ist wie folgt:
public void Entry_InsertItem(ExperimentViewModel item)
ich verschiedene Markup in die versucht haben ??? Abschnitt, wie ein Listview mit einem Select mit dieser Signatur:
public IEnumerable<MeasurementViewModel> Measurements_GetData(
[Control("ddExperiment")] int experimentType) ...
Das funktioniert die richtige Form angezeigt werden, sondern auf Postbacks ExperimentViewModel.Measurements ist immer null. Ich habe auch versucht, Methoden in der Listenansicht und einen Repeater ohne Erfolg zu verwenden.
Ich kann das natürlich manuell tun, aber ich dachte, dass es einen Standard Weg geben muss, dies mit Modellbindung zu tun. Offensichtlich muss ich ein Steuerelement definieren, das tatsächlich an das ExperimentViewModel.Measurements bindet, aber ich bin nicht sicher, wie man das in diesem Setup macht.
Die gleiche Lösung wie hier gepostet gilt: http://stackoverflow.com/questions/36804682/web-forms-model-binding-child-collection – naasking