具有IEnumerable属性的对象上的FormView
本文关键字:FormView 对象 具有 属性 IEnumerable | 更新日期: 2023-09-27 18:15:55
人员视图模型:
public class Person {
public string Name { get; set; }
public List<Person> Relatives { get; set; }
public bool IsSelected { get; set; }
}
我的页面上有一个asp:FormView
控件,其中包含一个绑定到Person
类的集合属性的asp:GridView
。
<asp:FormView ID="ui_frmMain" runat="server" DefaultMode="Edit" OnCallingDataMethods="ui_frmMain_CallingDataMethods" SelectMethod="GetItems" UpdateMethod="UpdateItems" ItemType="Person">
<EditItemTemplate>
<%# Item.Name %>
<asp:GridView ID="..." runat="server" DataSource='<%# Bind("Relatives") %>' ItemType="Person">
<ItemTemplate>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="Selected" runat="server" Checked='<%# Bind("IsSelected") %>' />
</ItemTemplate>
</asp:TemplateField>
</ItemTemplate>
</asp:GridView>
<EditItemTemplate>
</asp:FormView>
我使用.Net 4.5数据绑定将我的模型发送回UpdateMethod UpdateItems(Person person)
,但是Relatives
属性始终为null。
有没有办法:
- 从网格视图看双向绑定
- 将gridview的CheckBox绑定到模型上的
IsSelected
属性
在"手动"保存更新的人员对象上的更改之前,循环并逐个添加嵌套的集合对象。
例如:
UpdateItems(Person person)
{
// :( probably null for Relatives :(
GridView myGrid = (GridView)FindControl("MyGrid");
for (int i = 0; i < myGrid.Rows.Count; i++)
{
Textbox txtName = (Textbox)myGrid.Rows[i].FindControl("");
CheckBox chkSelected = (Checkbox)myGrid.Rows[i].FindControl("");
Person p = new Person();
p.Name = txtName.Text;
p.IsSelected = chkSelected.cheked;
person.Relatives.Add(p);
}
myEntity.SaveChanges();
这种方法很糟糕,但我还没有看到任何东西能识别嵌套集合中的更改。