1

I'm using FormView in Asp.net 4.5 to edit entity model like this:

<asp:FormView runat="server" ....>
   <EditItemTemplate>
     .....
     <asp:DropDownList runat="server" SelectedValue='<%# BindItem.value %>'>
     </asp:DropDownList>
     .....
   </EditItemTemplate>
</asp:FormView>  

If BindItem.value is one of the values in DropDownList items this works perfectly, but if BindItem.value was ,for example, null or any value out of range, this will raise an exception like this:

Selection out of range
Parameter name: value

Is there a way to let DropDownList selects first item if BindItem.value is wrong?

4

1 回答 1

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;
}
于 2012-12-26T15:15:09.497 回答