いくつかのテキスト ボックス、ボタン、およびその他のコントロールを備えた asp.net Web フォームがあります。ボタンの 1 つは、一部のテキスト ボックスのコンテンツの検証をトリガーすることになっています。これは正常に機能しますが、検証が失敗した場合、ページの後続のポストバックはすべて防止されます。無効な値を修正するとエラー メッセージは表示されなくなりますが、ポストバックは発生しません。
検証は AJAX UpdatePanel 内で行われています。それが重要かどうかはわかりません。
いくつかのテキスト ボックス、ボタン、およびその他のコントロールを備えた asp.net Web フォームがあります。ボタンの 1 つは、一部のテキスト ボックスのコンテンツの検証をトリガーすることになっています。これは正常に機能しますが、検証が失敗した場合、ページの後続のポストバックはすべて防止されます。無効な値を修正するとエラー メッセージは表示されなくなりますが、ポストバックは発生しません。
検証は AJAX UpdatePanel 内で行われています。それが重要かどうかはわかりません。
回避策がうまくいったことをうれしく思いますが、このページにアクセスする他のユーザーの利益のために、クライアント側の検証を無効にすることは、受け入れられる解決策とはほど遠いものです. だからここに行きます:
しかし、なぜそれが周りにあったときにだけ起こったのかUpdatePanelは、私にはまだ不明です。
他の人が述べたように、あなたが抱えていた問題は、検証の試みが失敗したためにそれ以上のポストバックが妨げられている可能性が最も高いです.
参照:検証後にフォームがポストバックされないのはなぜですか?
Page_BlockSubmitクライアント側の検証が失敗した場合に true に設定されるという変数があります。
function Page_ClientValidate(validationGroup) {
....
Page_BlockSubmit = !Page_IsValid;
return Page_IsValid;
}
したがって、 aが a__doPostBackの一部として発生する場合、次OnSelectedIndexChangedのDropDownListチェックがあります。
function ValidatorCommonOnSubmit() {
....
var result = !Page_BlockSubmit; /* read the value */
....
Page_BlockSubmit = false; /* reset it */
return result;
}
これは初めてブロックしますが、フラグをクリアするため、次のポストバック試行は機能するはずです。
私の場合、 のイベントの回避策は、DropDownListクライアントOnSelectedIndexChanged側のイベントにスニペットを追加することonchangeでした:
<asp:DropDownList runat="server" ID="SomeDropDownList" OnSelectedIndexChanged="AlwaysDoSomething"
onchange="resetValidationState(this);">
....
</asp:DropDownList>
<script type="text/javascript">
function resetValidationState() {
// clear any postback blocks, which occur after validation fails:
window.Page_BlockSubmit = false;
}
</script>
そのスニペットをそれ自体に入れることでうまくいくかもしれませんonchange。
ただし、このボタンをクリックした後は、検証エラーが修正されていない限り、他のボタンでポストバックが発生することはありません。そのため、テキスト ボックスの検証を必要としないはずの btnDelete は、テキスト ボックスの値が修正されるまでポストバックできません。
次のコードではその動作が見られません..
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="RequiredFieldValidator" ControlToValidate="TextBox1" ValidationGroup="pc">
</asp:RequiredFieldValidator>
<asp:Button runat="server" ID="btnSubmit" Text="Submit" Width="150" CausesValidation="true" ValidationGroup="pc" />
<asp:Button runat="server" ID="btnDelete" Text="Delete" CausesValidation="false" />
私はここで完全に基地から外れている可能性がありますが、問題があると思います。(私は主に devexpress コントロールを使用しているため、ルールが少し異なる場合があります)。検証が失敗すると、ページ全体が無効に設定されるため、ポストバックは発生しません。削除ボタンが検証を引き起こさないため、それらのエディターが有効に変更された後に再検証されない可能性がありますか?