ASP.NET下拉列表具有SelectedValue,该列表无效,因为它在项列表中不存在

时间:2015-04-15 19:16:55

标签: c# asp.net

我的问题非常简单,我找到了很多例子,但它们并不简明扼要。

下面的

是我的aspx文件中的标记

<asp:DropDownList ID="ddlCountry" DataTextField="CountryName" DataValueField="CountryCode" runat="server">
        </asp:DropDownList>
        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />

以下是我背后的代码

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            LoadCountry();
            this.ddlCountry.SelectedValue = "USA";

        }
    }

    private void LoadCountry()
    {
        DataTable dtResult = null;
        dtResult = new DataTable("Countiers");
        dtResult.Columns.Add("CountryCode");
        dtResult.Columns.Add("CountryName");

        DataRow dtRow1 = dtResult.NewRow();
        dtRow1["CountryCode"] = "PAKISTAN";
        dtRow1["CountryName"] = "PAKISTAN";
        dtResult.Rows.Add(dtRow1);

        DataRow dtRow2 = dtResult.NewRow();
        dtRow2["CountryCode"] = "INDIA";
        dtRow2["CountryName"] = "INDIA";
        dtResult.Rows.Add(dtRow2);

        DataView dv = new DataView(dtResult);
        dv.Sort = "CountryName";

        this.ddlCountry.DataSource = dv;
        this.ddlCountry.DataBind();
        this.ddlCountry.Items.Insert(0, new ListItem("--Please Select--", "-1"));
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        this.ddlCountry.SelectedValue = "USA";
    }
}

我只是在国家/地区加载此下拉列表,在调用LoadCountry方法后的初始页面加载事件中,我将selectedValue设置为&#34; USA&#34;没有例外或错误。但是在通过单击Button1回发后,我再次将selectedValue设置为&#34; USA&#34;但是这次发生了异常(具有一个无效的SelectedValue,因为它在项目列表中不存在)。我理解价值&#34; USA&#34;是不是在列表中,为什么它抛出异常,但为什么它最初没有抛出异常?

1 个答案:

答案 0 :(得分:0)

这是一种记录在案的行为,但我实际上并不知道其原因:

当所选值不在可用值列表中并且执行回发时,将抛出ArgumentOutOfRangeException异常。

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.selectedvalue%28v=vs.110%29.aspx