ここで説明したのと同じ問題が発生しました。
入力フィールドでRequiredFieldValidatorを使用するときに2回クリックする必要がある理由についての説明だけで、質問のみが回答済みとしてマークされます-テキストボックスのぼかし(たとえば)が検証を修正し、次に実際に投稿するために1回形。
ボタンを2回クリックする必要はありません!誰かがこれに対する解決策または回避策を知っていますか?
ここで説明したのと同じ問題が発生しました。
入力フィールドでRequiredFieldValidatorを使用するときに2回クリックする必要がある理由についての説明だけで、質問のみが回答済みとしてマークされます-テキストボックスのぼかし(たとえば)が検証を修正し、次に実際に投稿するために1回形。
ボタンを2回クリックする必要はありません!誰かがこれに対する解決策または回避策を知っていますか?
バリデーターに追加できEnableClientScript=false
ます。
これにより、クライアント側の検証が妨げられるため、常にポストバックが返されます(ただし、これは必ずしも希望どおりではない場合があります)。検証は引き続き行われ、サーバー側でのみ行われます。
if (Page.IsValid) { ... }
バリデーターのステータスを確認するには、ボタンクリックロジックを必ずで囲んでください。
以前にコードを投稿しなかったことをお詫びします。これはの標準的な問題であると思いましたが、その後、私の特定の問題は、入力されたパスワードが一致することを確認するために使用されるRequiredFieldValidator
から来ていることに気付きました。CompareValidator
CompareValidatorが原因で、私が説明した問題が発生し、投稿ボタンをクリックする前に、フィールドから離れてクリックしてぼかして検証する必要がありました。
理由はわかりませんが、表示を動的から静的に変更することCompareValidator
で問題が解決しました。
バリデーターがDisplay="Dynamic"であり、エラーメッセージの表示により送信ボタンが移動する場合、MouseUpイベントは送信ボタンによって受信されません。この場合、検証は起動してエラーメッセージをクリアしますが、送信ボタンは起動しません。この問題を解決するには、バリデーターをDisplay = "Static"に設定するか、エラーメッセージが表示されたときに送信ボタンが移動しないようにフォームを再配置します。
動的検証メッセージ用に約1行の垂直方向のスペースを予約する方法は次のとおりです。
<div style="height:1.5em;overflow:visible;">
<asp:RequiredFieldValidator ID="R1" runat="server"
ErrorMessage="Name is required" ControlToValidate="TextBoxName"
Display="Dynamic"></asp:RequiredFieldValidator>
</div>
EnableClientScript = "false"を設定する必要はありませんでしたが、クライアント側の検証関数が実装されていないCustomValidatorには役立ちました。
コードを投稿することは常に良い考えです。そうすれば、テスト環境でコードを実行し、回答を投稿する前にコードが機能することを確認するためにコードを変更できます。
追加することをお勧めします
causesValidation="true"
ボタンに移動して、それが機能するかどうかを確認します。
私にはもっと良い考えがあります。
Text=""をテキストボックスコントロールに追加します。
InitialValue=""をValidatorControlに追加します。
投稿するときに、テキストボックスの値がまだ初期値であることがわかり、エラーがスローされ、フォームは投稿されません。
これを試して:
<asp:RequiredFieldValidator ID="reqFieldCloseComment" ControlToValidate="tbCloseComment" ValidationGroup="ChangeStatus" ErrorMessage="Please enter a reason" Display="Dynamic" runat="server" InitialValue=""></asp:RequiredFieldValidator>
<asp:TextBox ID="tbCloseComment" runat="server" CausesValidation="true" TextMode="MultiLine" Height="107px" Width="400px" Text=""></asp:TextBox>
<asp:Button ID="btnCloseRequestFinal" Text="Finish" CssClass="CloseReqButton" runat="server" ValidationGroup="ChangeStatus" />
これが私にとってうまく機能し、ダブルクリックを取り除くのに役立つコードです。
<asp:TextBox ID="TextBox1" runat="server" autocomplete="off"
Enabled="true" MaxLength="20" onfocus="SetActiveControl(this);" Text=""
CausesValidation="true" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
runat="server" ControlToValidate="TextBox1" Display="Static" ErrorMessage="Ha!" SetFocusOnError="True" EnableClientScript="true" ForeColor="" InitialValue="" />
$(function() {
$("input.btn").on("click",function(){
if(Page_BlockSubmit == true) {Page_BlockSubmit = false};
})
});
Page_BlockSubmitは、バリデーターを定義するときにコードビハインドから生成されたjsによって定義されるJS変数です。MSがこの変数を必要とする理由については詳しく説明していませんが、シナリオは次のとおりです。</ p>
最初のクリックでPage_BlockSubmitがfalseになります。2回目のクリックで、Page_BlockSubmitの値が確認され、trueが返されます。
私が投稿したコードを実装した場合、ボタンをクリックするたびに、変数がfalseに設定され、クリックするたびに送信がトリガーされます。
また、googlechromeを使用してPage_BlockSubmitの値をトレースできます。