1

標準の ASP.NET ページにいくつかの入力コントロールを含むフォームがあります。検証コントロールを使用して、サーバー上の入力を検証します。

検証が失敗したときにポストバックが防止されるという事実に関する問題を説明している記事がいくつかあることに気付きました。つまり、ポストバックが防止されることはありませんが、ポストバックが発生するたびに検証が行われます。つまり、ユーザーが入力フィールドの値を変更するたびにフォームが赤いテキストで塗りつぶされます (彼はよく知っていても)彼がフォームを完成させなかった!)。

このフォーラムの他の記事では、この動作は意図的であると主張しています。明らかに、ユーザーは、「送信」を押す前に何か間違ったことをしたという情報に悩まされたくありません。送信ボタンが押されたときに検証の概要のみを表示し、ポストバックでは表示しないようにコントロールを構成するにはどうすればよいですか?

注: 送信ボタンが押されたときにのみ Page.IsValid を呼び出します。それ以外の場所では呼び出しません。ありがとう。

4

3 に答える 3

3

すべてのバリデーターと検証を実行するボタンにvalidationgroupプロパティを追加してみてください。詳細: http: //msdn.microsoft.com/en-us/library/ms227424.aspx 例:

    <asp:TextBox ID="TextBox1" Runat="server" ValidationGroup="First"></asp:TextBox>
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" Runat="server" ValidationGroup="First"
    ErrorMessage="TextBox1 should not be blank" ControlToValidate="TextBox1">

    </asp:RequiredFieldValidator>
    <asp:Button ID="Submit1" Runat="server" ValidationGroup="First" Text="Submit 1" />
于 2012-07-24T06:41:54.953 に答える
0

ボタンのクリック時に検証する必要があるすべてのコントロールに対して、同じ検証グループ プロパティを指定するだけです。また、ボタンには同じ検証グループがあり、ボタンのcausevalidationプロパティを true に設定する必要があります。これにより、ポストバックを回避できます。ありがとう。

于 2013-10-11T07:06:02.027 に答える
0

検証グループは、ValidationSummary 表示領域をローカライズし、通常は関連するデータ フィールドに物理的に近づけます。値変更時の自動ポストバックとは関係ありません。

バリデータでクライアント スクリプトが有効になっているかどうかを確認します。そうでない場合、サーバーのみがデータを検証できます。値の変更にはポストバックが必要です。

PS: 単純なフォームでは、報告されたすべてのエラーが既定のグループの下に蓄積され、関連するメッセージが一緒に表示される可能性があるため、検証グループは使用しません。複雑なフォームでは、いくつかのグループを作成して、エラーを問題のあるデータに物理的に近づけることがあります。グループ化に関係なく、すべての検証メソッドが実行され、指定されたグループ内の関連する validationSummary に報告されます (指定されている場合)。 Microsoft からこれを編集します。

プログラムで検証するには、validationGroup パラメーターを受け取る Validate メソッド オーバーロードを呼び出して、その検証グループのみの検証を強制できます。Validate メソッドを呼び出すと、これまでに検証されたすべてのグループの有効性が IsValid プロパティに反映されることに注意してください。これには、ポストバックの結果として検証されたグループと、プログラムによって検証されたグループの両方が含まれる場合があります。いずれかのグループのいずれかのコントロールが無効な場合、IsValid プロパティは false を返します。

http://msdn.microsoft.com/en-us/library/vstudio/ms227424(v=vs.100).aspx

GROUPS はポストバックとは何の関係もありません。彼はおそらく、自動ポストバックが設定されているか、スクリプトがオフになっているコントロールを持っています。

于 2014-10-24T23:08:01.913 に答える