1

私はウェブプログラミングが初めてです。連絡先情報を受け入れる非常に標準的なページがあり、それに検証コントロールを追加しようとしています。ユーザーがキャンセル ボタンをクリックしても何も保存されないため、ページをアンロードして前のページに戻りたいだけです。私の問題は、キャンセル ボタンでもCausesValidation="false検証イベントがまだ発生しており、ポスト バックが発生しないことです。Visual Studio 2012 と C# を使用しています。問題を示すために、作業中のコードを必要最小限のコードに減らすテスト ページを作成しました。Page_Validation = false; の両方で javascript disableValidation() 関数を試しました。そして、成功せずに個々の検証コントロールを無効にするループ。Page_Validation をチェックすると false になり、ループは例外Page_Validators is undefinedをスローします.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestMe.aspx.cs" Inherits="ElmoWeb.TestMe" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Simple Little Test Form</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="uxEmail" runat="server" placeHolder="email address" type="email" AutoCompleteType="Email"></asp:TextBox>
            <asp:RegularExpressionValidator ID="uxEmailValidator" runat="server"
                ControlToValidate="uxEmail"
                ValidationExpression="^[a-zA-Z][\w\._%+-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$"
                ErrorMessage="The email address is invalid"
                EnableClientScript="false" ValidationGroup="testing"
                Display="Static"/>
        </div>
        <div>
            <asp:Button ID="Submit" runat="server" Text="Submit" CausesValidation="true" UseSubmitBehavior="true" ValidationGroup="testing" />
            <asp:Button ID="Cancel" runat="server" Text="Cancel" CausesValidation="false" UseSubmitBehavior="true" ValidationGroup="FakeValidationGroup" />
        </div>
        <div>
            <asp:ValidationSummary ID="ValidationSummary1" runat="server" DisplayMode="List" HeaderText="You must correct the following errors." ValidationGroup="testing" />
        </div>
    </form>
</body>
</html>

現在、コード ビハインドは出力ウィンドウにメッセージを書き込むだけなので、ポスト バックが発生したかどうかを確認できます。

protected void Page_Load(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine("TextMe.aspx Page_Load event, sender = " + sender.ToString() + ", EventArgs = " + e.ToString());
}
4

1 に答える 1

1

2 つ以上の送信ボタンの動作が異なる問題を解決する自然な方法は、検証グループを使用することです。

検証グループは、送信ボタンとバリデーターのグループの両方で ValidationGroup 属性を使用して設定されます。同じ値がボタンとバリデーターをバインドし、ボタンがクリックされたときに属性の同じ値を持つバリデーターのみが起動します。

あなたの場合、承認ボタンとバリデーターの ValidationGroup を「承認」に設定し、キャンセルボタンにデフォルト (空の) 値を残すと、問題が解決します。これは、試したどの回避策よりもはるかに簡単です。

于 2013-09-25T19:07:21.573 に答える