注意:这是 .NET 4.5 中的 ASP.NET Web 窗体模型绑定,而不是 MVC。
我正在使用 ASP.NET Web 窗体 (4.5) 的新强类型模型绑定功能来生成可编辑的项目列表。这适用于查看初始列表、编辑项目和删除项目。但是,我在插入新项目时遇到问题。
具体来说,在我的 EditItemTemplate 和 InsertItemTemplate 中,我有一个 DropDownList(嗯,实际上它是一个从 DropDownList 派生的自定义控件,但就这个问题而言,它是一个 DropDownList)。该控件在标记中定义如下...
<agp:ClientStatusDropDownList ID="ClientStatusID" runat="server"
SelectedValue="<%#: BindItem.ClientStatusID %>" />
在 EditItemTemplate 中,这很好,但在 InsertItemTemplate 中,这会在运行页面时产生错误:Eval()、XPath() 和 Bind() 等数据绑定方法只能在数据绑定控件的上下文中使用。
因此,我SelectedValue="<%#: BindItem.ClientStatusID %>"
从 InsertItemTemplate 中删除了该部分并再次尝试。这次没有错误消息,但是在ListView.InsertMethod
调用时,模型上的 ClientStatusID 属性未设置为 DropDownList 的值(而其余属性设置正确)。
ListView.InsertMethod:
public void ListView_InsertMethod(int ID) {
Model model = this.DbContext.Models.Create();
if (this.TryUpdateModel(model)) {
this.DbContext.SaveChanges();
this.ListView.DataBind();
}
}
模型类:
public class Model{
public Int32 ID { get; set; }
public String Description { get; set; }
public Boolean IsScheduleFollowUp { get; set; }
public Nullable<Int32> ClientStatusID { get; set; }
}
编辑项目模板:
<EditItemTemplate>
<tr>
<td>
<asp:TextBox ID="Description" runat="server" Text="<%#: BindItem.Description %>" />
</td>
<td>
<asp:CheckBox ID="IsScheduleFollowUp" runat="server" Checked="<%# BindItem.IsScheduleFollowUp %>" />
</td>
<td>
<agp:ClientStatusDropDownList ID="ClientStatusID" runat="server" SelectedValue="<%#: BindItem.ClientStatusID %>" />
</td>
<td>
<asp:Button ID="Update" runat="server" ClientIDMode="Static" CommandName="Update" Text="Update" />
<asp:Button ID="Cancel" runat="server" ClientIDMode="Static" CommandName="Cancel" Text="Cancel" />
</td>
</tr>
</EditItemTemplate>
插入项模板:
<InsertItemTemplate>
<tr>
<td>
<asp:TextBox ID="Description" runat="server" Text="<%#: BindItem.Description %>" />
</td>
<td>
<asp:CheckBox ID="IsScheduleFollowUp" runat="server" Checked="<%# BindItem.IsScheduleFollowUp %>" />
</td>
<td>
<agp:ClientStatusDropDownList ID="ClientStatusID" runat="server" />
</td>
<td>
<asp:Button ID="Insert" runat="server" ClientIDMode="Static" CommandName="Insert" Text="Add" />
</td>
</tr>
</InsertItemTemplate>
我原本以为是控件的 ID 用于确定模型上的属性值将被传递给(即 TextBox 被称为“描述”的地方,值将被传递给“描述”模型的属性)。显然情况并非如此,而是由“<%# BindItem.Description %>”控制,但是从这个问题的其余部分可以看出,我无法在“InsertItemTemplate”中使用这种语法。我不敢相信在这种情况下不支持 DropDownList,但我找不到任何使用 Google 或 Bing 与 4.5 模型绑定一起使用 DropDownList 的示例(事实上,在 ASP 中新模型绑定的示例非常少。 NET 4.5 使用除了几个 TextBox 控件之外的任何东西)。
谁能进一步阐明这个问题(最好告诉我需要做什么)?
我看过的关于 SO 的其他问题......
- 在 ListView InsertItemTemplate 中绑定 DropDownList 会引发错误
- 在 EditItemTemplate 和 InsertItemTemplate 中具有相同标记的 ASP.NET ListView
- 将 ASP.net DropDownList 的 SelectedValue 绑定到自定义对象
- 数据绑定到 ListView 中的 ASP.NET DropDownList 列表
所有这些都使用旧式绑定方法,而不是 4.5 中的新方法
谢谢。