我无法弄清楚如何在Web表单中使用模型绑定来填充视图模型的子集合。假设我有以下几点:ASP.NET web表单模型绑定嵌套集合
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;}
}
所以有两种类型的实验A或B,每种实验都需要一组不同的测量。我想在一页上完成所有操作,以便用户选择实验类型,然后显示通过简单文本框输入的测量列表。这在MVC中很简单,但我坚持使用Web表单,但不清楚如何执行此操作。
<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>
FormView控件的插入方法是这样的:
public void Entry_InsertItem(ExperimentViewModel item)
我试着在各种标记???部分,像这种签名SelectMethod一个ListView:
public IEnumerable<MeasurementViewModel> Measurements_GetData(
[Control("ddExperiment")] int experimentType) ...
工程,以显示正确的形式,而是回传ExperimentViewModel.Measurements总是空。我也试过在列表视图和转发器上插入方法无济于事。
我明显可以做到这一点手动,但我想必须有一个标准的方式来做到这一点使用模型绑定。显然我必须定义一个实际绑定到ExperimentViewModel.Measurements的控件,但我不知道如何在此设置中执行此操作。
相同的解决方案,发布在这里适用:http://stackoverflow.com/questions/36804682/web-forms-model-binding-child-collection – naasking