ASP.NET 验证控件
2009-09-22 23:58 Tam 阅读(666) 评论(0) 编辑 收藏 举报
介绍:
当我们开发服务器控件的时候,使用ASP.NET自带的验证控件,能简化许多操作,下面就此简单介绍一下ASP.NET验证控件的工作原理。
如何实现验证的?
首先,我们先建立一个简单的网站工程。在页面上放上三个作DEMO用的控件(TextBox, Button, RequiredFieldValidator),完成后页面代码如下:
然后,我们在浏览器打开此页面,并查看其源代码。会发现在<form>中多出了一段代码:
而在此段代码的下面,会同时出现对应的JS方法:
以上代码的作用是提交之前先检查页面是否有效,如果无效的话(例如必填项为空),则取消提交动作。在这方法里面,我们看到它会调用一个叫ValidatorOnSubmit的方法。
此方法的具体内容是:
页面执行顺序是,当页面刚初始化完成,先将变量Page_ValidationActive设为false, 方法ValidatorOnLoad()执行的最后一步,会将这个变量设置回true。
同时,我们的按钮会加上下面的属性:
WebForm_DoPostBackWithOptions方法:
WebForm_PostBackOptions方法:
Page_ClientValidate方法:
ValidatorUpdateIsValid方法:
当我们点击按钮时,事件的执行顺序是:
参考文章:
1. ASP.NET Validation in Depth
2. Understanding ASP.NET Validation Library
当我们开发服务器控件的时候,使用ASP.NET自带的验证控件,能简化许多操作,下面就此简单介绍一下ASP.NET验证控件的工作原理。
如何实现验证的?
首先,我们先建立一个简单的网站工程。在页面上放上三个作DEMO用的控件(TextBox, Button, RequiredFieldValidator),完成后页面代码如下:
1<body>
2 <form id="form1" runat="server">
3 <div>
4 <div>
5 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></div>
6 <div>
7 <asp:Button ID="Button1" runat="server" Text="Button" />
8 </div>
9 </div>
10 <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="RequiredFieldValidator"
11 ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
12 </form>
13</body>
验证控件属性ControlToValidate指向TextBox控件。那么,页面就完成了。2 <form id="form1" runat="server">
3 <div>
4 <div>
5 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></div>
6 <div>
7 <asp:Button ID="Button1" runat="server" Text="Button" />
8 </div>
9 </div>
10 <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="RequiredFieldValidator"
11 ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
12 </form>
13</body>
然后,我们在浏览器打开此页面,并查看其源代码。会发现在<form>中多出了一段代码:
1 onsubmit="javascript:return WebForm_OnSubmit();"
而在此段代码的下面,会同时出现对应的JS方法:
1<script type="text/javascript">
2//<![CDATA[
3function WebForm_OnSubmit() {
4if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
5return true;
6}
7//]]>
8</script>
2//<![CDATA[
3function WebForm_OnSubmit() {
4if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
5return true;
6}
7//]]>
8</script>
以上代码的作用是提交之前先检查页面是否有效,如果无效的话(例如必填项为空),则取消提交动作。在这方法里面,我们看到它会调用一个叫ValidatorOnSubmit的方法。
此方法的具体内容是:
1<script type="text/javascript">
2//<![CDATA[
3
4var Page_ValidationActive = false;
5if (typeof(ValidatorOnLoad) == "function") {
6 ValidatorOnLoad();
7}
8
9function ValidatorOnSubmit() {
10 if (Page_ValidationActive) {
11 return ValidatorCommonOnSubmit();
12 }
13 else {
14 return true;
15 }
16}
17 //]]>
18</script>
2//<![CDATA[
3
4var Page_ValidationActive = false;
5if (typeof(ValidatorOnLoad) == "function") {
6 ValidatorOnLoad();
7}
8
9function ValidatorOnSubmit() {
10 if (Page_ValidationActive) {
11 return ValidatorCommonOnSubmit();
12 }
13 else {
14 return true;
15 }
16}
17 //]]>
18</script>
页面执行顺序是,当页面刚初始化完成,先将变量Page_ValidationActive设为false, 方法ValidatorOnLoad()执行的最后一步,会将这个变量设置回true。
1function ValidatorOnLoad() {
2 if (typeof(Page_Validators) == "undefined")
3 return;
4
5 省略中间验证控件和目标控件的绑定代码
6
7 Page_ValidationActive = true;
8}
2 if (typeof(Page_Validators) == "undefined")
3 return;
4
5 省略中间验证控件和目标控件的绑定代码
6
7 Page_ValidationActive = true;
8}
同时,我们的按钮会加上下面的属性:
1 onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("Button1", "", true, "", "", false, false))"
WebForm_DoPostBackWithOptions方法:
Code
WebForm_PostBackOptions方法:
Code
Page_ClientValidate方法:
Code
ValidatorUpdateIsValid方法:
1function ValidatorUpdateIsValid() {
2 Page_IsValid = AllValidatorsValid(Page_Validators);
3}
2 Page_IsValid = AllValidatorsValid(Page_Validators);
3}
当我们点击按钮时,事件的执行顺序是:
- 调用WebForm_DoPostBackWithOptions方法。
- 调用WebForm_PostBackOptions方法。
- 调用Page_ClientValidate方法
- 在Page_ClientValidate里面,调用ValidatorUpdateIsValid方法,设置值Page_IsValid。
- 最后,调用页面的__doPostBack方法。
- 在__doPostBack方法中,我们可以看到,调用了<form>中的onsubmit()方法。
- 接着,调用WebForm_OnSubmit方法。
- 调用ValidatorOnSubmit方法。
- 调用ValidatorCommonOnSubmit方法。
参考文章:
1. ASP.NET Validation in Depth
2. Understanding ASP.NET Validation Library