簡體   English   中英

ASP.NET Web窗體模型綁定嵌套集合

[英]ASP.NET web forms model binding nested collection

我不知道如何在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的insert方法是這樣的:

public void Entry_InsertItem(ExperimentViewModel item)

我在???中嘗試過各種標記? 部分,例如帶有帶有此簽名的SelectMethod的ListView:

public IEnumerable<MeasurementViewModel> Measurements_GetData(
    [Control("ddExperiment")] int experimentType) ...

可以顯示正確的形式,但在回發ExperimentLabelModel.Measurements始終為null。 我也嘗試過在列表視圖上插入方法和無用的中繼器。

我顯然可以手動執行此操作,但是我認為必須有一種使用模型綁定執行此操作的標准方法。 顯然,我必須定義一個實際上綁定到ExperimentViewModel.Measurements的控件,但是我不確定如何在此設置中執行此操作。

您可以使用DataSource="<%# Item.Measurements %>綁定子ListView ,這是一個示例:

<asp:FormView ID="FormView" runat="server" RenderOuterTable="false" ItemType="ExperimentViewModel" DataKeyNames="Id" DefaultMode="Edit" SelectMethod="FormView_GetItem" UpdateMethod="FormView_UpdateItem">
        <EmptyDataTemplate>
            The record you requested does not exist.
        </EmptyDataTemplate>
        <EditItemTemplate>
        <asp:ListView ID="ListView" runat="server" ItemType="MeasurementViewModel" DataKeyNames="Id" DataSource="<%# Item.Measurements %>">
        ...
        </asp:ListView> 
    </EditItemTemplate>
</asp:FormView>

我不太肯定這些值將在回發時填充。 您可能必須在insert方法中重新填充模型。 我不確定您要在子模板中做什么。 希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM