クライアント確認後の DropdownList 自動ポスバック
-
09-06-2019 - |
質問
autopostback が true に設定されたドロップダウンリストがあります。ユーザーに、実際に値を変更したいかどうかを確認してもらいたいと思います。これは、ポストバックでサーバー側のイベントを発射します(SelectedIndExchanged)。
onchange 属性「returnconfirm('変更するには[OK]をクリックしてください。」を追加してみました。それ以外の場合は、[キャンセル]をクリックしますか? '; ")ただし、確認の結果に関係なく止まりません。リスト内の値は、[キャンセル]を選択した場合に戻りません。
DropdownList タグから onchange 属性を削除すると、ページはポストバックを実行します。onchange 属性が追加された場合は行われません。イベント ハンドラーを接続する必要がありますか (私は C# .Net 2.0 を使用しています)。
あらゆる手がかりが役に立ちます。
ありがとう!
解決
onChange イベントを JavaScript 関数に設定し、関数内で JavaScript アラートを表示し、合格した場合は __doPostback 関数を利用しようとしましたか?
つまり
drpControl.Attributes("onChange") = "DisplayConfirmation();"
function DisplayConfirmation() {
if (confirm('Are you sure you want to do this?')) {
__doPostback('drpControl','');
}
}
他のヒント
CustomValidator コントロールを利用して、confirm() を実行する JavaScript 関数を呼び出すことでドロップダウンを「検証」できます。
<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" />
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};");
現在、常に次の結果を返しています。 confirm()
, 、だから戻ってきたとしても true
, 場合でも、ポストバックが起動される前にイベントの実行を停止することになります。あなたの onchange
すべき return false;
のときのみ confirm()
これも次のようになります。
if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;
AutoPostBack が true に設定されている場合、onchange 属性のオーバーライドは機能しません。これは、ASP.NET が常に onchange スクリプトの末尾に次のコードを追加するためです。
;setTimeout('__doPostBack(\'YourDropDown\',\'\')', 0)
AutoPostBack を false に設定した場合は、onchange を「confirm and __doPostBack」タイプのスクリプトでオーバーライドします (上記を参照してください。以下) は機能しますが、__doPostBack 関数を手動で作成する必要がある場合があります。
if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;
常に返されるため、ユーザーが [OK] または [キャンセル] をクリックしたかどうかに関係なく、ドロップダウンリストの OnSelectedIndexChanged イベントが発生します。
イベントが有線であることを確認してください。
dropDown.SelectedIndexChanged += new EventHandler(dropDown_SelectedIndexChanged);
クライアント側属性を適用して確認を返すこともできます。キャンセルされた場合は、それに応じてインデックスを設定します。
dropDown.Attributes.Add("onchange", "javascript: return confirm('confirmation msg')");
<asp:DropDownList runat="server" ID="ddlShailendra" AutoPostBack="True" OnSelectedIndexChanged="ddlShailendra_SelectedIndexChanged" onchange="javascript: { if(confirm('Click ok to prevent post back, Cancel to make a postback'))return true;} " >
<asp:ListItem Text="tes" Value="1" ></asp:ListItem>
<asp:ListItem Text="test" Value="-1"></asp:ListItem>
</asp:DropDownList>
関数をインラインで記述し、ポストバックが必要な条件の「return」を含めないでください。これは機能し、標準に従っています。