我做了一个简单的项目来解释我的问题。
这是我的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处停止。
代码中是否有问题,或者它的行为是否应该如此?
我已经阅读了很多关于此的文章并尝试了很多不同的解决方案,但到目前为止还没有人工作过。
答案 0 :(得分:0)
根据ASP.NET Page Life Cycle,回发事件处理在加载事件后发生 。
如果请求是回发,则调用控件事件处理程序。后 ,调用所有验证器控件的Validate方法 设置各个验证器控件和的各个验证器控件的IsValid属性 页。 (这个序列有一个例外:处理程序 在验证后调用导致验证的事件。)
回发表示客户端正在向服务器发出http请求,并且每次请求到达服务器时,页面生命周期阶段都会在这个确切的顺序。所以第二个答案是否定的,在进入断点1之前不可能进入断点2。