【发布时间】:2019-06-25 12:58:38
【问题描述】:
我是 ASP.NET 的初学者,只是对验证控件的工作原理有一些疑问: 假设我有一本教科书和一个自定义验证,例如:
<asp:TextBox ID="txtTest" runat="server" ValidationGroup="test" OnTextChanged="txtTest_TextChanged" />
<asp:CustomValidator ID="CustomValidator" runat="server" ClientValidationFunction="validatePhoneNumbers" ErrorMessage="xxx" OnServerValidate="CustomValidator_ServerValidate">*</asp:CustomValidator>
还有一个将表单提交到服务器的按钮
<asp:Button ID="Button" runat="server" OnClick="Button_Click" Text="Submit" />
假设我禁用了 javascript,所以没有客户端 javascript 验证。
Q1-每个验证控件都有public void Validate ();方法,是不是意味着Validate()方法先被调用,间接调用了CustomValidator_ServerValidate()方法?
Q2-MSDN 文档指出:
如果请求是回发,则调用控制事件处理程序。之后,调用所有验证器控件的 Validate 方法,该方法设置各个验证器控件和页面的 IsValid 属性。
这意味着首先调用 txtTest_TextChanged() 然后调用 CustomValidator_ServerValidate() ,那么检查 Page.IsValid 有什么意义:
protected void txtTest_TextChanged(Object sender, EventArgs e)
{
if (!Page.IsValid) return;
lblMessage.Text = "Txt changed!";
}
因为 IsValid 只能在调用控件事件处理程序后设置?
【问题讨论】:
标签: javascript asp.net .net validation page-lifecycle