私は次のコードを持っていますRequiredFieldValidator
。プロパティは、EnableClientScript
検証コントロールで「false」として設定されます。また、ブラウザでスクリプトを無効にしました。
Page.IsValid
コードビハインドでは使用していません。それでも、テキストボックスに値を入力せずに送信すると、error message
.
Page_Load
@Dai のコメントから、 で実行されるコードがある場合、これが問題になる可能性があることがわかりましたpostback
。検証エラーはスローされません。
(ただし、ボタンクリックハンドラの場合はチェック不要Page.IsValid
)
if (Page.IsPostBack)
{
string value = txtEmpName.Text;
txtEmpName.Text = value + "Appended";
}
質問
- サーバー側の検証が前に行われないのはなぜ
Page_Load
ですか? - を使用すると正常に動作するのはなぜ
Page.IsValid
ですか? - これを説明する記事への参照を提供できますか? (言うものではありません-常に使用し
Page.IsValid
ます;しかし、使用する必須のシナリオは何かを言うものPage.IsValid
更新 1
ASP.NET Validatorsを参照する よくある誤解
Page.IsValid
Page.Validate()
の後のどこかで暗黙的に呼び出されるメソッドを実行した後にのみアクセスできますPage_Load
。すべてのロジックを Page_Load イベント ハンドラに保持する場合 (これは非常にお勧めできません)、 をPage.Validate()
チェックする前に を呼び出しますPage.IsValid
。
注:すべてのロジックを .xml に保持しないことをお勧めしPage_Load
ます。ボタン クリック イベントで何かが発生する場合は、ボタン クリック イベント ハンドラーに移動します。ドロップダウン イベントで何かが発生する場合は、ドロップダウンの選択項目変更イベント ハンドラーに移動します。
更新 2
サーバー側の検証を使用している場合も追加する必要があるようIf(Page.IsValid)
です。CustomValidator がうまく機能しないを参照してください。button click
Custom Validator
注: クライアント側の検証に関する質問がここにあります: Page_IsValid または Page_ClientValidate() を使用するかどうか (クライアント側イベントの場合)
マークアップ
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
alert('haiii');
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ValidationSummary runat="server" ID="vsumAll" DisplayMode="BulletList" CssClass="validationsummary" ValidationGroup="ButtonClick" />
<asp:TextBox ID="txtEmpName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="valEmpName" runat="server" ControlToValidate="txtEmpName"
EnableClientScript="false" ErrorMessage="RequiredFieldValidator" Text="*" Display="Dynamic"
ValidationGroup="ButtonClick"></asp:RequiredFieldValidator>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" ValidationGroup="ButtonClick" />
</div>
</form>
</body>
</html>
コードビハインド
protected void Button1_Click(object sender, EventArgs e)
{
string value = txtEmpName.Text;
SubmitEmployee(value);
}
参考文献: