如何选择下拉列表的第一项,如果值I'm传递给它在FormView BindItem不在范围内
本文关键字:BindItem 范围内 FormView 下拉列表 选择 何选择 如果 一项 | 更新日期: 2023-09-27 17:49:29
我在Asp.net 4.5中使用FormView来编辑实体模型,如下所示:
<asp:FormView runat="server" ....>
<EditItemTemplate>
.....
<asp:DropDownList runat="server" SelectedValue='<%# BindItem.value %>'>
</asp:DropDownList>
.....
</EditItemTemplate>
</asp:FormView>
如果BindItem 。value是下拉列表项中的值之一,这工作得很好,但是如果BindItem。例如,值为null或任何超出范围的值,这将引发如下异常:
选择超出范围
参数名称:value
是否有办法让下拉列表选择第一个项目,如果BindItem。价值错了吗?
这绝对是在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;
}