0

使用asp:DropDownList带有OnDataBound="PageDDL_DataBound"...

    protected void PageDDL_DataBound(Object sender, EventArgs e)
    {
        PageDDL.Items.Insert(0, new ListItem("BACK", "0"));
        PageDDL.Items.Insert(0, new ListItem("-- Select Page --", "none"));
        PageDDL.SelectedIndex = -1;

        if (linkEnt != null && (LinkType)Convert.ToInt16(linkEnt.LinkTypeValue) == LinkType.InternalLink)
        {
            if (PageDDL.Items.FindByValue(linkEnt.LinkValue) != null)
            {
                PageDDL.SelectedValue = linkEnt.LinkValue;
            }
        }
    }

linkEnt.LinkValue当为“0”时会引发异常(而不是在此代码中) 。注意PageDDL.SelectedValue在代码的其他任何地方都没有改变。

任何人?

4

3 回答 3

0

以下代码适用于这种情况

    protected void PageDDL_DataBound(Object sender, EventArgs e)
    {
        PageDDL.Items.Insert(0, new ListItem("[BACK]", "0"));
        PageDDL.Items.Insert(0, new ListItem("-- Select [BACK] or a Page  --", "none"));
        PageDDL.SelectedIndex = -1;

        if (linkEnt != null && (LinkType)Convert.ToInt16(linkEnt.LinkTypeValue) == LinkType.InternalLink)
        {
            ListItem item = PageDDL.Items.FindByValue(linkEnt.LinkValue);
            if (item != null)
            {
                item.Selected = true;
            }
        }
    }

我很想知道为什么会这样,但原始代码没有!

于 2013-02-18T10:25:52.417 回答
0

我认为将所有这些代码放在数据绑定事件之外是可行的。我认为您的代码不需要任何DataBound事件,还是有?

对于数据绑定事件,您应该将某些内容与下拉列表绑定,然后必须调用下拉列表的Databind()事件,该DataBound事件将为添加的每个项目调用事件。

而且我认为它引发了异常,因为当您尝试设置所选值时,下拉列表未与项目完全绑定,因此无法找到该项目。

于 2013-02-15T10:45:55.927 回答
0

试着先打电话PageDDL.Items.Clear();

也许这是一个错误:

Microsoft Connect - ASP.NET DropDownList SelectedValue 被持久化,如果控件是 DataBound 第二次,则会导致异常

于 2013-02-15T10:50:53.687 回答