0

を使用しasp:DropDownListOnDataBound="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」の場合、(このコード内からではなく) 例外がスローされます。NotePageDDL.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 が保持され、コントロールが 2 回目の DataBound である場合に例外が発生する

于 2013-02-15T10:50:53.687 に答える