我正在学习asp.net页面生命周期。 我在MSDN上找到了一篇文章 http://msdn.microsoft.com/en-us/library/ms178472.aspx 它说
如果请求是回发,则调用控件事件处理程序。之后,调用所有验证器控件的Validate方法,该方法设置各个验证器控件和页面的IsValid属性。
文章中的图片还说明了事件处理后的火灾。 如果这是真的,我怎样才能在处理事件时获得验证器的状态?
答案 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 验证页面,并使页面循环处理其余部分。这通常用于大多数项目中。