0

以下で説明する問題は、「ページが読み込まれるたびにコントロールが同じ値を表示する」という一般的な問題とはほぼ正反対であることに注意してください。表現された動作は一般的に望ましくないことを理解しています。

ポストバックでもページ読み込みイベントでデータバインドされているリストボックスがあります。

変更された selectedindex のイベント ハンドラーがヒットすると、コントロールは、既に再度バインドされており、この時点で selectedindex を持っていない場合でも、なんらかの方法でポストされた値を持ちます。

これがどのように可能になるかを知っている人はいますか。

編集:

SelectedIndex が実際にリセットされることを示すために、次の簡単なマークアップを使用してフォームを作成できます。

    <label for="textbox1">Original Posted Value: </label>
    <asp:TextBox runat="server" ID="textbox1" />
    <asp:DropDownList runat="server" ID="dropdown" OnSelectedIndexChanged="dropdown_SelectedIndexChanged" AutoPostBack="true" />
    <label for="textbox2">Value at point handler is hit: </label>
    <asp:TextBox runat="server" ID="textbox2" />

.cs の次のコードで

        protected void Page_Load(object sender, EventArgs e)
    {
        textbox1.Text = dropdown.SelectedIndex.ToString();
        dropdown.DataSource = new string[] { "none", "A", "B", "C" };
        dropdown.DataBind();
    }
    protected void dropdown_SelectedIndexChanged(object sender, EventArgs e)
    {
        textbox2.Text = dropdown.SelectedIndex.ToString();
    }

2 番目のテキスト ボックスの値は常に 0 になることに注意してください。

4

1 に答える 1

1

ここでの問題は、ポストバックを含むページの読み込みごとに、データソースが再割り当ておよび再バインドされることです。選択したインデックスが変更されてから0に戻されます。ポストバックをキャッチしてみてください。データソースは、.csでこのようなポストバック(初期ロード)でない場合にのみ設定してください。

保護されたvoidPage_Load(オブジェクト送信者、EventArgs e)

    {
        if (Page.IsPostBack)
        {
            textbox1.Text = dropdown.SelectedIndex.ToString();
        }
        else
        {
            dropdown.DataSource = new string[] { "none", "A", "B", "C" };
            dropdown.DataBind();
        }
    }

    protected void dropdown_SelectedIndexChanged(object sender, EventArgs e)
    {
        textbox2.Text = dropdown.SelectedIndex.ToString();
    }
于 2008-10-10T16:15:42.493 に答える