1

.aspx に次のコードがあります

<td>
  <script type="text/javascript" language="javascript">\
    function ShowConfirm() {
      if (confirm("Are you sure?") == true)
        return true;
      else
        return false;
    }
  </script>
  <asp:DropDownList ID="ddl1s"  runat="server"  
     onselectedindexchanged="ddl1_SelectedIndexChanged" AutoPostBack="True">
  </asp:DropDownList>
</td>

aspx.csに次のコードがあります

protected void ddlEnrollmentStatus_SelectedIndexChanged(object sender, EventArgs e)
{
   ddl1.Attributes.Add("onchange", "ShowConfirm();");
}

ドロップダウンリストに 2 つの項目があります (はいといいえ)

リストから 2 番目の項目を選択すると、ページが更新され、Page_Load イベントで設定したものが表示されます。

私は何を間違っていますか?ユーザーが選択した値が意図したものであるかどうかを確認する確認ボックスを作成しようとしています。[はい] を押した場合は、値を選択した値に変更します。いいえを押すと、元の値に戻ります。

4

4 に答える 4

3

完全にクライアント側の検証を行っている場合は、可能であればクライアント コードでのみ行うのが最も簡単です。

<asp:DropDownList ID="ddl1s"  runat="server" 
    onselectedindexchanged="ddl1_SelectedIndexChanged" 
    AutoPostBack="True" onchange="return ShowConfirm();">
</asp:DropDownList>

すべてのサーバー処理が最初に行われ、次にページがユーザーのブラウザーに送信され、次にすべてのクライアント イベントが実行されるため、サーバー イベントとクライアント イベントの混合は非常に厄介になります (そして、すべてのクライアント コンテキストはサーバーへの各ラウンドトリップ間で失われます)。あなたの現在のコードは言っています:

  1. ユーザーがドロップダウン値を変更します。
  2. サーバーへの往復。
  3. サーバーは JavaScript コードを で送信しますonchange
  4. 何も起こりません。 onchangeユーザーが実際に値を変更したとき (1) は存在しませんでした。変更を知らずにページが新たに読み込まれるため、現在は起動しません。
于 2013-03-12T15:50:41.763 に答える
1

AutoPostBack="True"コードの欠陥行です。これにより、コントロールにポスト バックが発生します。ただし、新しい値を追跡するのではなく、ポストバックするときに古い値を追跡します。

イベントを正しく発生させる必要があるだけです。この属性を False に設定することから始めます。次に、PostBack を行う責任があるページの内容を特定します。

于 2013-03-12T16:14:32.763 に答える
1

100%確信はありませんが、これが必要だと思います:

ddl1.Attributes.Add("onchange", "return ShowConfirm();");

私が書いた「戻る」を見てください。

これでもJavaScriptを簡素化できます:

function ShowConfirm() {
  return confirm("Are you sure?") == true;
}
于 2013-03-12T15:47:16.103 に答える
1

こんな感じで使えます。

ddl1.Attributes.Add("onchange", "return ShowConfirm();");

ページ読み込みイベントで使用します。

または、これを html (.aspx) ページにバインドします。

<asp:DropDownList ID="ddl1s"  runat="server" onchange="return ShowConfirm();"
 onselectedindexchanged="ddl1_SelectedIndexChanged" AutoPostBack="True">
于 2013-03-12T15:50:18.213 に答える