如何选择下拉列表的第一项,如果值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。价值错了吗?

如何选择下拉列表的第一项,如果值I'm传递给它在FormView 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;
}