您的位置:首页 > Web前端 > JavaScript

利用JavaScript手动触发ASP.Net validator验证控件的方法

2012-02-23 11:11 633 查看
开发环境:.NET Framework 3.5.1 sp1

参考文章http://www.codeproject.com/KB/aspnet/JavascriptValidation.aspx

http://msdn.microsoft.com/zh-cn/library/aa479045.aspx

http://www.cnblogs.com/minsentinel/archive/2008/03/21/1116502.html

我们在用Web Form开发的的时候,有时候可能需要在客户端用JavaScript来触发Validator验证控件的验证来检查输入的正确性。

比如有个在弹出窗口中预览编辑中的内容的功能,在预览之前需要对编辑中的内容进行输入检查。如果输入检查是通过Validator控件的客户端验证来实现的,

这里就涉及到怎样在不进行submit的情况下用JavaScript来触发Validator验证。

我们知道在通过aspx生成的html代码中,会有很多框架自动添加的内嵌资源(web source)文件引用和代码。对于Validator控件的验证代码就藏在其中。

从页面的源文件中下载WebResource.axd这个文件可以看到js验证的源码.

操作:用IE打开网页,保存网页,选择保存类型为"网页,全部"





就可以看到保存下来的文件:



这两个差不多就是验证的所有源码了.

通过Debug跟踪有幸找到了源代码,发现起关键作用的是以下2个JavaScript方法:


1 Page_ClientValidate(validationGroup)
返回值是布尔值(true:验证通过, false:验证失败)。



2 ValidatorValidate(val, validationGroup, event)
无返回值,无法判断验证是否通过。调用Validator的验证并更新其表示形式以及验证失败时聚焦控件等


其实在Page_ClientValidate里会调用ValidatorValidate来调用Validator的验证和并根据display属性的值(None, Static, Dynamic)来调整Validator的表示形式。

一, Page_ClientValidate方法

参数为ValidationGroup属性的值。没有指定参数的情况下表示触发页面所有的Validator控件。

<script type="text/javascript">
function preview() {
// 输入验证
if (!Page_ClientValidate("Detail")) {
return;
}

// 验证成功后的处理
......
}
</script>

如果没有使用ValidationSummary控件,而且不关心验证成功与否的后续处理。那可以使用ValidatorValidate方法

***

问题:

一.同时验证全部验证组:

a)客户端解决

1.

val res1=Page_ClientValidate("Detail") ;

val res2=Page_ClientValidate("BBB");

2.

if (!Page_ClientValidate("Detail") || !Page_ClientValidate("BBB")) {
return;
}

以上两种写法,只有当Detail验证通过的时候,才会进行验证BBB,没有办法页面上同时进行验证两个及以上.

可以用Page_ClientValidate()来验证多个验证组的.

if (!Page_ClientValidate()) {
return;
}

Page_ClientValidate说明:

Page_ClientValidate():验证所有的控件(有设置验证组和没有验证组的都进行验证).

Page_ClientValidate(""):验证没有设置验证组的控件.

Page_ClientValidate("PP"):验证验证组为PP的控件.

b)服务器端解决

Page.Validate();//验证所有的控件

if (!Page.IsValid)
{
return;
}

Page.Validate说明:

Page.Validate():验证所有的控件(有设置验证组和没有验证组的都进行验证).

Page.Validate(""):验证没有设置验证组的控件.

Page.Validate("PP"):验证验证组为PP的控件.

二.验证自定义的验证组.

(参考 http://blog.163.com/xiao_mege/blog/static/729427532010112845924555/ )

添加两个JS function:


function ValidatePage(validationGroups)

{

var list = validationGroups.split('&');

for (var i = 0; i < Page_Validators.length; i++)

{

var validator = Page_Validators[i];

if ((validator.validationGroup && ExistsGroup(list, validator.validationGroup))

|| (!validator.validationGroup && ExistsGroup(list, '')))

{

ValidatorValidate(validator, validator.validationGroup);

Page_IsValid = Page_IsValid && validator.isvalid;

}

else

{

validator.isvalid = true;

ValidatorUpdateDisplay(validator);

}

}

//ValidationSummary

for (var i = 0; i < list.length; i++)

{

ValidationSummaryOnSubmit(list[i]);

}

Page_BlockSubmit = !Page_IsValid;

return Page_IsValid;

}

function ExistsGroup(list, group)

{

var found = false;

for (i = 0; i < list.length; i++)

{

if (list[i] == group)

{

found = true;

break;

}

}

return found;

}


调用:


<asp:Button ID="ibtnSave" runat="server" OnClientClick="return AAA()" />

function AAA()

{

if(ValidatePage("&Group1&Group2"))// 验证 没有设置的验证组,Group1,Group2(没有设置验证组的设置为空就可以了)

{

return true;

}

return false;

}



***

二, ValidatorValidate方法

参数: var 要触发的Validator控件对象

validationGroup ValidationGroup属性的值

event 验证对象ID(用于聚焦。需要focusOnError=“true”的情况下才有用)

例子程序可以参考这里

引用:http://www.cnblogs.com/ouryou/articles/1704866.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐