1

値が英国ではない場合に他のテキスト ボックス コントロールを表示するこの ASP.NET ドロップ ダウン コントロールがあります (これは、郵便番号を使用して英国の住所を見つけるのに役立ちます)。UK が再選択されたら、他のコントロールを非表示にしたいと思います。ビュー ステートと AutoPostBack を true に設定しました。一度だけ発生するonSelectedIndexChangedイベントがあります (ドロップダウン値がデフォルトで英国とは異なる国に変更された場合)。

OnSelectedIndexChanged値が異なるたびに を起動したいのですが、そうではありません。

PSこれがコードスニペットです。

<asp:DropDownList runat="server" ID="Country2" AutoPostBack="True" OnSelectedIndexChanged="Country2_SelectedIndexChanged" DataSource="<%# RegionList %>" DataTextField="Name" DataValueField="Code" CssClass="dropdown country"></asp:DropDownList>


protected void Country2_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList d = (DropDownList)sender;
    addressEntry.CountryPrePostBack_SelectedIndexChanged(d.SelectedItem.Value);
}
4

4 に答える 4

2

このようなことが起こるたびに、それは検証コントロールが原因でした。これらの追加のテキストボックスには、ポストバックを抑制する可能性のあるバリデータが添付されていますか? 簡単に確認するには、ドロップダウン リストで CausesValidation="false" を設定します。

于 2009-07-31T14:33:39.203 に答える
1

最初のポストバックで JavaScript エラーが発生したときに、同様の動作が見られました。

最初のポストバックによって新しい div が表示され (コード ビハインドではなく JavaScript を使用)、その div が HTML に含まれていなかったときに、これを見たと思います。そのため、「show(div)」JavaScript は欠落しているオブジェクトを参照していました。

確かに、非常に特殊なケースですが、最初のポストバック後に js エラーを確認することをお勧めします。

マイケル

于 2008-11-16T14:50:49.370 に答える
0

2 つの質問しか思い浮かびません。

1.) page_load イベントでリストに入力 (バインド) していますか? その場合は、ページが最初に読み込まれたときにのみこれを行う必要があります。コントロール (または他のコントロール) にバインドすると、選択したインデックスがリセットされます。viewstate が有効になっている場合は、元のリストが保持されます。2.) ここで、上記が既に当てはまると仮定して、このページの親から viewstate が有効になっているかどうかを尋ねます。トレースをオンにしてページ コントロール リストを見ると、この特定の項目のビューステート サイズを確認できるはずです。値がある場合は、viewstate を正しく設定していることがわかります。そうでない場合は、親コントロールを上に移動して、ビューステートが終了する場所を確認します。

Viewstate はポストバックを検出するために必要なので、正しく機能していることを確認することが重要です。

今、私は VB.net プログラマーですが、あなたのサブにハンドラーがないように見えることに気付きました。vb.net では、通常、次のようなものが表示されます。

Private Sub LinkButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton.Click

イベントを適切に発生させる他の唯一の方法は、それをボタンに含めることですが、すでに正しく実行しているようです。上記の方法で試してみて、何かが変わるかどうかを確認してください。

アンドリュー

于 2008-11-07T01:58:15.973 に答える
0

イベントをどのように添付していますか?次のようなコード ビハインドを使用していますか。

this.dropDownList.SelectedIndexChanged += new EventHandler(dropDownList_SelectedIndexChanged);

それとも、ASPX/ASCX で割り当てていますか?

前者の場合は、条件内で割り当てていないことを確認してください!IsPostback。ポストバックごとに追加されたイベントを確認する必要があります。

デバッガーを使用して、後続のイベントで実際にポストバックが発生しているかどうかを確認してみましたか? 新しく追加されたコントロールが検証の失敗を引き起こしている可能性があります。バリデーターを使用している場合は、CauseValidation = false毎回ポストバックするようにドロップダウン リストを設定してください。

于 2008-10-28T12:12:01.157 に答える