我在Asp.net 4.5中使用FormView来编辑像这样的实体模型:
<asp:FormView runat="server" ....>
<EditItemTemplate>
.....
<asp:DropDownList runat="server" SelectedValue='<%# BindItem.value %>'>
</asp:DropDownList>
.....
</EditItemTemplate>
</asp:FormView>
如果BindItem.value是DropDownList项中的值之一,则此方法可以正常工作,但如果BindItem.value例如为null或任何超出范围的值,则会引发如下异常:
选择超出范围
参数名称:值
如果BindItem.value错误,有没有办法让DropDownList选择第一项?
答案 0 :(得分:3)
这绝对是ASP.NET中一直困扰我的事情之一。下拉列表的数据绑定不是很聪明。
我经常用手解决这个问题,而不是使用单/双向数据绑定。在Page_PreRender中,您只需手动检查集合是否包含值。如果没有,请选择索引0.注意,您可能必须先绑定数据。
private void Page_PreRender(object sender, System.EventArgs e)
{
if (formview1.CurrentMode == FormViewMode.Edit)
{
DropDownList ddl = formview1.FindControl("dropdownlist1");
ddl.ClearSelection();
var item = ddl.FindByValue("[MYVALUE]");
if (item == null) ddl.SelectedIndex = 0;
else item.Selected = true;
}
}
您也可以尝试这种方法(它可能更干净):
protected void dropdown_DataBound(object sender, EventArgs e)
{
DropDownList ddl = (DropDownList)sender;
ddl.ClearSelection();
var item = ddl.FindByValue("[MYVALUE]");
if (item == null) ddl.SelectedIndex = 0;
else item.Selected = true;
}