回发事件处理程序的顺序和所有验证程序控件的Validate方法

时间:2010-08-11 12:23:06

标签: c# asp.net

我正在学习asp.net页面生命周期。 我在MSDN上找到了一篇文章 http://msdn.microsoft.com/en-us/library/ms178472.aspx 它说

  

如果请求是回发,则调用控件事件处理程序。之后,调用所有验证器控件的Validate方法,该方法设置各个验证器控件和页面的IsValid属性。

文章中的图片还说明了事件处理后的火灾。 如果这是真的,我怎样才能在处理事件时获得验证器的状态?

4 个答案:

答案 0 :(得分:1)

在进一步确认Ben Robinson的回答时,看起来Microsoft在提出此问题后更新了文档。 MSDN文章阐明:

  

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

这是正确的行为。您可以使用一个简单的页面进行测试:

标记:

<form id="form1" runat="server">
    <asp:TextBox ID="txtTest" runat="server" ValidationGroup="test" OnTextChanged="txtTest_TextChanged" />
    <asp:CustomValidator ID="cvTest" runat="server" ValidationGroup="test" ControlToValidate="txtTest" ValidateEmptyText="true" OnServerValidate="txtTest_Validate" />
    <asp:Button ID="btnTest" runat="server" Text="Test" ValidationGroup="test" OnClick="btnTest_Click" />
</form>

代码隐藏:

protected void txtTest_TextChanged(object sender, EventArgs e)
{
}

protected void txtTest_Validate(object sender, ServerValidateEventArgs e)
{
}

protected void btnTest_Click(object sender, EventArgs e)
{
}

在所有事件上设置断点。运行应用程序,更改框中的文本,然后单击按钮。你应该先观察TextChanged,然后是Validate,然后点击。

答案 1 :(得分:0)

在服务器端事件处理程序被触发之前验证验证器,你可以依赖它们中的e.IsValid,这肯定有效,很多人一直使用它。

答案 2 :(得分:0)

我不确定图片是否正确,因为当您处于按钮的点击事件时,验证器已经被解雇了。您调用Page.IsValid检查是否有任何验证器失败。

我从未使用它,但Page类还包含一组验证器(Page.Validators)。您可以使用它来确定哪些特定验证器失败。

答案 3 :(得分:0)

Page_Load事件在Control的服务器事件之前触发。您可以在Page_Load事件中使用 Page.IsValid 验证页面,并使页面循环处理其余部分。这通常用于大多数项目中。