1

我是网络编程新手。我有一个接受联系信息的非常标准的页面,我正在尝试向它添加验证控件。当用户单击取消按钮时,没有保存任何内容,所以我只想卸载页面并返回上一页。我的问题是,即使取消按钮CausesValidation="false的验证事件仍在触发,并且不会发生回发。我正在使用 Visual Studio 2012 和 C#。我创建了一个测试页面,以将我正在使用的代码减少到演示问题所需的最少代码。我已经尝试使用 Page_Validation = false 的 javascript disableValidation() 函数;和循环禁用单个验证控件但没有成功。当我检查 Page_Validation 它是假的,并且循环抛出异常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

解决两个或多个提交按钮的行为方式不同的问题的自然方法是使用验证组。

在提交按钮和一组验证器上使用 ValidationGroup 属性设置验证组。相同的值绑定按钮和验证器,并且只有在单击按钮时才会触发具有相同属性值的验证器。

在您的情况下,将接受按钮上的 ValidationGroup 和您的验证器设置为“接受”并在取消按钮上保留默认(空)值将解决您的问题。这比您尝试的任何解决方法都简单得多。

于 2013-09-25T19:07:21.573 回答