使用CustomValidator时,在验证之前发布回发

时间:2014-03-11 23:04:38

标签: c# asp.net customvalidator

我做了一个简单的项目来解释我的问题。

这是我的Default.aspx:

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

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
<form id="form1" runat="server">
    <div>
        <asp:TextBox ID="txtDate" runat="server"></asp:TextBox>
        <asp:CustomValidator    ID="cusDate" 
                                runat="server" 
                                ValidateEmptyText="true" 
                                OnServerValidate="DateValidate" 
                                ValidationGroup="DateVal" 
                                ControlToValidate="txtDate" 
                                ErrorMessage="Date error"></asp:CustomValidator>

        <asp:ImageButton        ID="btnSaveDate" 
                                CausesValidation="true" 
                                ValidationGroup="DateVal" 
                                ImageUrl="~/Images/save_32.png" 
                                runat="server" />
    </div>
</form>
</body>
</html>

这是我的Default.aspx.cs

using System;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)  <<<<<<BREAKPOINT 1 HERE
            {
            }
        }

        protected void DateValidate(Object source, ServerValidateEventArgs args)
        {
            args.IsValid = false;  <<<<<<BREAKPOINT 2 HERE
        }
    }
}

我设置了两个断点,如上所示,并运行应用程序。当我点击“btnSaveDate”时,它首先在断点1处停止,然后在断点2处停止。我认为它将首先在断点2处停止,然后重新加载页面然后在断点1处停止。

代码中是否有问题,或者它的行为是否应该如此?

我已经阅读了很多关于此的文章并尝试了很多不同的解决方案,但到目前为止还没有人工作过。

1 个答案:

答案 0 :(得分:0)

根据ASP.NET Page Life Cycle回发事件处理加载事件后发生

  

如果请求是回发,则调用控件事件处理程序。后   ,调用所有验证器控件的Validate方法   设置各个验证器控件和的各个验证器控件的IsValid属性   页。 (这个序列有一个例外:处理程序   在验证后调用导致验证的事件。)

回发表示客户端正在向服务器发出http请求,并且每次请求到达服务器时,页面生命周期阶段都会在这个确切的顺序。所以第二个答案是否定的,在进入断点1之前不可能进入断点2。