使用javascript隐藏显示asp.net Validator控件
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="AJAXControls" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <!--ASP.NET Drop down control--> <asp:DropDownList ID="status" runat="server" > <asp:ListItem Selected="True" Text="Select" Value="0" /> <asp:ListItem Text="One" /> <asp:ListItem Text="Two" /> <asp:ListItem Text="Three" /> </asp:DropDownList> <!--ASP.NET Required Field Validator to validate the drop down.--> <asp:RequiredFieldValidator ID="statusValidator" runat="server" ErrorMessage="Please choose a value other than 'Select'" ControlToValidate="status" InitialValue="0" Visible="true"> </asp:RequiredFieldValidator> <!--Validator callout control--> <AJAXControls:ValidatorCalloutExtender ID="statusValidator_ValidatorCalloutExtender" runat="server" TargetControlID="statusValidator"> </AJAXControls:ValidatorCalloutExtender> <asp:Button ID="submit" Text="Submit" OnClientClick="javascript:return ValidatePage();" runat="server" /> </div> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> </form> </body> </html>
示例代码中包含一个dropdown控件,并且和required field validator 控件关联,相关验证标注控件在下面。当点击提交按钮,如果发生验证错误,标注控件信息将会显示出来,如下图所示
验证标注控件错误信息是自动弹出的。你可以通过javascript调用此控件对应的一些脚本来实现隐藏了显示验证控件信息。示例如下
<script language="javascript" type="text/javascript"> function ValidatePage() { //点击提交按钮触发的表单验证事件 if (Page_ClientValidate()) { return true; } else { hideValidatorCallout(); return false; } } //隐藏AjaxControlToolkit ValidatorCalloutExtender控件的方法 function hideValidatorCallout() { //下面的代码隐藏显示(激活)的AjaxControlToolkit ValidatorCalloutExtender控件 AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout.hide(); setTimeout(showValidatorCallout, 3000); } function showValidatorCallout() { //通过$find方法获取AjaxControlToolkit ValidatorCalloutExtender控件 AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout = $find('<% =statusValidator_ValidatorCalloutExtender.ClientID %>'); //显示AjaxControlToolkit ValidatorCalloutExtender控件 AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout.show(true); } </script>
上面代码中使用了: AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout
_currentCallout 属性指向ValidatorCalloutExtender (VCE) 控件的引用。当验证不通过,并且存在验证标注和某个验证控件相管理,_currentCallout存储的为这个VCE的引用对象。如果当前页面存在多个VCE控件,_currentCallout指向和第一个发生错误的验证控件相关联的VCE控件。要隐藏验证标准控件,可以调用此对象的方法hide,代码如下
AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout.hide();
任何时候 _currentCallout仅和一个 VCE关联,防治同时显示多个VCE控件,导致页面杂乱,既当多个验证发生错误,会在多个地方显示验证标注。为了防止页面杂乱,每次只显示一个VCE控件。
同样的,要显示验证标准控件,可以调用_currentCallout 对象的方法show
//通过$find得到AjaxControlToolkit ValidatorCalloutExtender控件 AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout = $find('<% =statusValidator_ValidatorCalloutExtender.ClientID %>'); //显示AjaxControlToolkit ValidatorCalloutExtender控件 AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout.show(true);
但是如果直接那样使用上面的代码,将会抛出异常
Microsoft JScript runtime error: 'this._popupBehavior' is null or not an object
原因是还没有调用ValidatorEnable 或者 ValidatorValidate函数,因为这2个函数会设置一些需要的配置,如 _popupBehavior属性,使验证控件能正常运作。 VCE控件不能直接显示,因为它是一个扩展的控件,扩展于验证控件(validation control)。但验证控件没有通过时与之关联的VCE才会自动显示,所有想直接显示VCE控件,首先需要调用ValidatorEnable 或者 ValidatorValidate 方法。
上面的代码演示了如何显示和隐藏验证标注控件,其中$find没有提到,具体可以参考:asp.net客户端$get和$find方法区别(查看原e文点击这里,原e文在blogspot.com,挨GFW奸过的,需要翻墙,参考这个:翻墙工具下载地址。)
与验证标注控件(Validator callout controls,下面简称VCE)相关的比较重要的方法和属性
方法
- _getErrorMessage():返回错误信息
- get_closeImageUrl():返回右上角的关闭VCE图片的url地址,默认为X标记。
- get_isOpen():返回一个布尔值指示VCE显示或者隐藏
- get_warningIconImageUrl():返回警告图标地址, 默认图片为三角形里面有一个感叹号。
- get_width():返回VCE宽度
- hide():隐藏VCE
- set_closeImageUrl(imageUrl):设置VCE关闭图片,替换默认的X标记
- set_warningIconImageUrl(imageUrl):设置警告图片地址替换默认的
- set_width(int) :设置VCE宽度
- show():显示VCE
属性
- _closeImageUrl:设置/获取关闭VCE的图片地址
- _warningIconImageUrl:设置/获取警告图片地址
- _width:设置/获取VCE宽度
- _popupBehavior: VCE行为属性,详细参考下面
- _errorMessageCell:设置/获VCE的错误信息,详细参考下面
ValidatorCallout._popupBehavior方法
与_popupBehavior属性相关方法(仅能通过这个属性调用),示例代码如下
//通过$find获取VCE控件 var valCallout = $find('<%=statusValidator_ValidatorCalloutExtender.ClientID %>'); //获取_popupBehavior属性后调用方法 var popUpBehavior = valCallout._popupBehavior; popUpBehavior.set_x(10); popUpBehavior.set_y(20); //或者直接通过VCE的_popupBehavior属性来调用 valCallout._popupBehavior.set_x(20); valCallout._popupBehavior.set_y(30);
- get_x():返回VCE的x坐标(css对应的left属性)
- get_y():返回VCE的y坐标(css对应的top属性)
- get_visible():只是VCE是否可见
- set_x(x_coordinate):设置VCE的x坐标,参数为数字
- set_y(y_coordinate):设置VCE的y坐标,参数为数字
ValidatorCallout._errorMessageCell property属性
_errorMessageCell 属性为一个TD (cell)控件,相关的属性和方法与DOM对象的TD一致。下面的示例代码使用此属性更改错误信息。
//通过$find获取VCE控件 var valCallout = $find('<%=statusValidator_ValidatorCalloutExtender.ClientID %>'); //获得td单元格 var messageCell = valCallout._errorMessageCell; //修改单元格显示的错误信息 messageCell.innerHTML = "Changed:)";
加支付宝好友偷能量挖...
原创文章,转载请注明出处:使用javascript隐藏显示asp.net Validator控件