C# Web窗体模型绑定子集合

C# Web窗体模型绑定子集合,c#,asp.net,webforms,model-binding,asp.net-4.5,C#,Asp.net,Webforms,Model Binding,Asp.net 4.5,我不知道如何像在MVC中一样使用模型绑定来更新子集合。所有集合类型控件似乎都采用了某种使用编辑/更新生命周期的服务器端存储机制,如果这是一个插入表单,而我希望将子集合存储在表单本身中,则不适合这种情况 public class BarViewModel { public string Name {get;set;} } public class FooViewModel { public string Description {get;set;} public List<Bar

我不知道如何像在MVC中一样使用模型绑定来更新子集合。所有集合类型控件似乎都采用了某种使用编辑/更新生命周期的服务器端存储机制,如果这是一个插入表单,而我希望将子集合存储在表单本身中,则不适合这种情况

public class BarViewModel
{
  public string Name {get;set;}
}
public class FooViewModel
{
  public string Description {get;set;}
  public List<BarViewModel> Bars {get;set;}
}
公共类BarViewModel
{
公共字符串名称{get;set;}
}
公共类视图模型
{
公共字符串说明{get;set;}
公共列表栏{get;set;}
}
我可以用什么在???本节:

<asp:FormView ID="Entry" RenderOuterTable="false" runat="server" DefaultMode="Insert"
   ItemType="FooViewModel" SelectMethod="Entry_GetItem" InsertMethod="Entry_InsertItem">
   <InsertItemTemplate>
     <asp:TextBox ID="txtDescription" Text="<%# BindItem.Description %>" runat="server" />
     <!-- ??? -->
   </InsertItemTemplate>
</asp:FormView>

我能找到的唯一可行的解决方案是在嵌套视图中为每个条目手动调用UpdateItem。基本上,FormView的UpdateMethod将迭代预期的项数,这些项数也可以存储在表单中,然后我将在嵌套的ListView上调用UpdateItem(index,false):

FooViewModel foo;
BarViewModel bar;

public void Foo_UpdateItem([Control("BarCount")] int? barCount)
{
  TryUpdateItem(foo);
  var bars = (ListView)Entry.FindControl("FooBars");
  for (var i = 0; i < barCount; ++i)
  {
      bar = foo.Bars[i];
      bars.UpdateItem(i, false);
  }
}
fooviewmodelfoo;
BarViewModelBar;
public void Foo_UpdateItem([Control(“BarCount”)]int?BarCount)
{
TryUpdateItem(foo);
var bar=(ListView)Entry.FindControl(“FooBars”);
对于(变量i=0;i

这为调用嵌套ListView的UpdateMethod建立了适当的上下文,一切都按预期进行。这是一个黑客攻击,但它是有效的。

我能找到的唯一可行的解决方案是为每个条目在嵌套视图上手动调用UpdateItem。基本上,FormView的UpdateMethod将迭代预期的项数,这些项数也可以存储在表单中,然后我将在嵌套的ListView上调用UpdateItem(index,false):

FooViewModel foo;
BarViewModel bar;

public void Foo_UpdateItem([Control("BarCount")] int? barCount)
{
  TryUpdateItem(foo);
  var bars = (ListView)Entry.FindControl("FooBars");
  for (var i = 0; i < barCount; ++i)
  {
      bar = foo.Bars[i];
      bars.UpdateItem(i, false);
  }
}
fooviewmodelfoo;
BarViewModelBar;
public void Foo_UpdateItem([Control(“BarCount”)]int?BarCount)
{
TryUpdateItem(foo);
var bar=(ListView)Entry.FindControl(“FooBars”);
对于(变量i=0;i
这为调用嵌套ListView的UpdateMethod建立了适当的上下文,一切都按预期进行。这是一个黑客,但它的工作