3

自動ポストバックがtrueに設定されたドロップダウンリストがあります。本当に値を変更したいかどうかをユーザーに確認してもらいたいのですが、ポストバックでサーバー側のイベント (selectedindexchanged) が発生します。

onchange 属性 "return confirm('Please click OK to change. そうでない場合は CANCEL?';") を追加しようとしましたが、確認結果に関係なくポストバックせず、キャンセルを選択するとリストの値が元に戻りません。

DropdownList タグから onchange 属性を削除すると、ページはポストバックします。onchange 属性が追加されている場合はそうではありません。イベントハンドラーを配線する必要がありますか (私は C# .Net 2.0 を使用しています)。

どんな手がかりも役に立ちます。

ありがとう!

4

8 に答える 8

8

onChange イベントを JavaScript 関数に設定してから、関数内で JavaScript アラートを表示し、合格した場合は __doPostback 関数を使用しようとしましたか?

すなわち

   
drpControl.Attributes("onChange") = "DisplayConfirmation();"

function DisplayConfirmation() {
  if (confirm('Are you sure you want to do this?')) {
    __doPostback('drpControl','');
  }
}
于 2008-09-16T16:29:30.250 に答える
6

Confirm() を実行する JavaScript 関数を呼び出すことで、CustomValidator コントロールを利用してドロップダウンを「検証」できます。

        <asp:DropDownList ID="TestDropDown" runat="server" AutoPostBack="true" CausesValidation="true"
            ValidationGroup="Group1"
            OnSelectedIndexChanged="TestDropDown_SelectedIndexChanged">
            <asp:ListItem Value="1" Text="One" />
            <asp:ListItem Value="2" Text="Two" />
        </asp:DropDownList>
       <script type="text/javascript">
            function ConfirmDropDownValueChange(source, arguments) {
                arguments.IsValid = confirm("Are you sure?");
            }
        </script>
        <asp:CustomValidator ID="ConfirmDropDownValidator" runat="server"
            ClientValidationFunction="ConfirmDropDownValueChange" Display="Dynamic" ValidationGroup="Group1"  />
于 2008-09-16T16:08:19.507 に答える
6

以下は、DropDownList が部分的なポストバックをトリガーしている場合に機能します。

// caching selected value at the time the control is clicked
MyDropDownList.Attributes.Add(
    "onclick",
    "this.currentvalue = this.value;");

// if the user chooses not to continue then restoring cached value and aborting by returning false
MyDropDownList.Attributes.Add(
    "onchange",
    "if (!confirm('Do you want to continue?')) {this.value = this.currentvalue; return false};");
于 2010-04-23T01:14:53.897 に答える
1

AutoPostBackがtrueに設定されている場合、onchange属性のオーバーライドは機能しません。これは、ASP.NETが常にonchangeスクリプトの最後に次の項目を追加するためです。

;setTimeout('__doPostBack(\'YourDropDown\',\'\')', 0)

AutoPostBackをfalseに設定すると、onchangeを「confirmand __doPostBack」タイプのスクリプト(上記を参照、以下を参照)でオーバーライドできますが、手動で__doPostBack関数を作成する必要がある場合があります。

于 2008-09-16T16:50:59.623 に答える
1

現在、常に の結果を返しているため、 がconfirm()返されたとしてもtrue、ポストバックが発生する前にイベントの実行を停止します。が次のようになっている場合にのみ行う必要onchangeがあります。return false;confirm()

if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;
于 2008-09-16T16:34:53.047 に答える
1
if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;

常に返されるため、ユーザーが [OK] または [キャンセル] をクリックしても、ドロップダウンリストの OnSelectedIndexChanged イベントが発生します。

于 2010-07-21T15:42:20.060 に答える
0

イベントが有線であることを確認します。

dropDown.SelectedIndexChanged += new EventHandler(dropDown_SelectedIndexChanged);

クライアント側の属性を適用して確認を返すこともできます。キャンセルされた場合は、それに応じてインデックスを設定します。

dropDown.Attributes.Add("onchange", "javascript: return confirm('confirmation msg')");
于 2008-09-16T15:52:53.570 に答える