javascript调用服务端验证控件

时间:2019-08-01 10:20来源:2020欧洲杯冠军竞猜官方网站
一、事件     //*******************Ajax调用验证控件(客户端调用服务器验证控件)********************                 Page_ClientValidate(null);//页面上的保有验证控件实行验证          

一、事件

    //*******************Ajax 调用验证控件(客户端调用服务器验证控件)********************
                Page_ClientValidate(null); //页面上的保有验证控件实行验证
                //js 能够获得页面上富有的证实控件在客户端是还是不是表达通过,
                // 在使用Page_IsValid前要先调用 Page_ClientValidate(null),因为她的默许值是true
                //alert(Page_IsValid);
                // ValidatorValidate(<%=RequiredFieldValidator1.ClientID%> , null, null)//调用钦定的控件推行验证
                 // <%=RequiredFieldValidator1.ClientID%> .isValid=false;
                //alert(<%=RequiredFieldValidator1.ClientID%> .isvalid)//获得钦赐的认证控件在客户端是或不是表明通过

这是一个经久不衰被作者不经意或然是从未意识的主题素材,难点是那样的:

         var isValid = true; //全局验证

在一个页面中,当有证实控件的时候,当Button控件触发OnClientClick事件,並且这些事件会重临true和false的时候,验证控件就能够失灵,不起成效了。具体描述如下:

      //txtLogid控件失去宗旨时接触事件(验证用户名是还是不是留存)
                var IdExist = document.getElementById("<%=txtLogid.ClientID%>")
            IdExist.onblur = function () {
              doAjax("GET", null, "../isAjaxHelper.ashx?userId=" IdExist.value,<%=CustomValidator1.ClientID%>)//调用Ajax 异步操作   
            }

.Net页面如下:

    //Ajas PostGet传值形式,prars参数,url提交页面,ContralID验证控件id
        function doAjax(PostGet, prars, url,ContralID) {
            xhr.open(PostGet, url, true);  //设置参数

复制代码 代码如下:

            //设置回调函数  callback (不是 callback())
          
            if (PostGet == "POST") {
                xhr.setRequestHeader("CONTENT-TYPE", "application/x-www-form-urlencoded");
                xhr.onreadystatechange = login;
                xhr.send(prars); //出发
            }
            else {
             xhr.onreadystatechange = function(){callback(ContralID)} ;
                xhr.send(null);
            }

<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:TextBox ID="TextBoxTest" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBoxTest"
ErrorMessage="不能够为空" Display="None"></asp:RequiredFieldValidator><ajaxToolkit:ValidatorCalloutExtender
ID="ValidatorCalloutExtender1" TargetControlID="RequiredFieldValidator1" runat="server">
</ajaxToolkit:ValidatorCalloutExtender>
<asp:Button ID="ButtonText" runat="server" Text="测验" OnClientClick="return confirm('你规定要付出吗?');" />
</div>
</form>

        }
        //回调函数1
        function callback(ContralID) {
            //检查 异步对象 的备选景况是否=4,假若等于4评释服务器已经将数据发回给异步对象了
            if (xhr.readyState >= 4) {
                if (xhr.status == 200) {
                    var rest = xhr.responseText
                    if (rest != null) {
                        if (rest == 1) {
                            isValid = true;
                        }
                        else {
                            isValid = false;
                        }
         //***************调用钦赐的控件推行验证会施行ClientValidate(source, arguments)方法*****************
                         ValidatorValidate(ContralID , null, null);
                    }
                } //符合规律重回,剖断服务器重临的状态码是或不是=200
                else {
                    alert(xhr.status);
                }
            }
        }

如上,在页面中参加RequireFieldValidator验证控件,使TextBoxTest的值不能够为空,在ButtonText提交页面时,要用户确认是还是不是需求付出。很轻便的贰个页面,貌似也尚未什么难点。不过当Text博克斯Test的值为空的时候,验证控件竟然不起功能,提交页面成功。那是什么来头吗?

 

二、响应事件

     //**************************自定义表达控件设置是不是表达通过***************************
        function ClientValidate(source, arguments) {
            if (isValid) {//用户名存在
                arguments.IsValid = true;
            } else {
                arguments.IsValid = false;
            }
        }

那是怎么回事呢?首先自个儿将ButtonTest的OnClientClick事件去掉后,验证控件是起效果的。那又是干什么呢?作者查看了页面包车型地铁源代码,开掘ButtonTest控件生成如下源代码:


<input type="submit" name="ButtonText" value="测试" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ButtonText", "", true, "", "", false, false))" id="ButtonText" />

                                <td valign="top" width="37%" align="left" style="height: 26px">
                                    <asp:TextBox ID="txtLogid" runat="server"></asp:TextBox>
                                    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" BackColor="White"
                                        ControlToValidate="txtLogid" Display="Dynamic" ErrorMessage="用户名无法为空" InitialValue=""
                                        ForeColor="Red">*</asp:RequiredFieldValidator>
                                    <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="用户名已存在" ControlToValidate="txtLogid"
                                        ClientValidationFunction="ClientValidate" Display="Dynamic" ForeColor="Red">*</asp:CustomValidator>
                                    <label id="LabUser" style="color: Red; font: menu">
                                    </label>
                                </td>

从那行源代码可以看出,验证控件在客户端生成了一段javascript代码,验证TextBox中的值是或不是为空。当自家加上ButtonTest的OnClientClick后,作者重新查看了源代码,ButtonTest控件生成的源代码如下:


<input type="submit" name="ButtonText" value="测量检验" onclick="return confirm('你鲜明要交给吗?');WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ButtonText", "", true, "", "", false, false))" id="ButtonText" />

上述是前台代码 有自定义表达控件(   <asp:CustomValidator ID="CustomValidator1" runat="server")  由于后台代码作者是写在形似管理程序

从那行代码中,能够特别通晓的阅览难题高居什么地点了,在客户端,首先执行的是自定义的javascript,然后在施行验证控件生成的这一段javascript,显著,在这种情形下,验证控件就失去任何意义了。

自家不通晓如何做自定义表明控件服务端验证 希望大神们辅导下

三、响应控件

精通了难点高居何等地点,就好办了,作者的化解办法是:在实施自定义的javascript(return confirm('你显明要提交吗?‘)前 ,将要验证页面中的控件是或不是相符准则,于是小编将ButtonTest的OnClientClick事件修改如下:

复制代码 代码如下:

<asp:Button ID="ButtonText" runat="server" Text="测量检验" OnClientClick="if(CheckClientValidate()) return Confirm('你鲜明要交给页面吗?');" />

CheckClientValidate()方法的代码如下:

复制代码 代码如下:

<script language="javascript" type="text/javascript">
function CheckClientValidate(){ 
   Page_ClientValidate();
   if (Page_IsValid){
   return true;
   }else{
   return false;
   }
 }
</script>

运作,测验。验证控件发挥功能。难题消除。

四、后记

那正是被自个儿已知忽略的主题材料和解决方案,当自家发掘那些题指标时候,冒出了一身冷汗,幸而做了残暴的劳动器端验证,不然可就惨了。从此处也得以看来钦点严俊的服务器端验证是何其的有不可或缺啊:-)。它不仅可以够幸免”红客“绕过客户端验证,还足避防卫因为自个儿从没意识的错误,形成数据的不准确。

注:

Page_ClientValidate(),本函数用于在含有微软求证控件的aspx页面中,依照用户输入操作是或不是合法,重临True大概False

可直接判定。

复制代码 代码如下:

 if(Page_ClientValidate())
 {
 return true;
 }
 else
 {
 return false;
 }

你或者感兴趣的小说:

  • jQuery Validate 验证,校验准则写在控件中的具体实例
  • ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
  • ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
  • 动用jQuery.Validate实行客户端验证(初级篇) 不应用微软认证控件的理由
  • 基于jquery实现的服务器验证控件的启用和剥夺代码
  • 教你用AngularJS框架一行JS代码实现控件验证效率
  • js调整.net验证控件是或不是可用。
  • fileupload控件 文件类型客户端验证完毕代码
  • asp.net 马克斯LengthValidator 最大尺寸验证控件代码
  • jQuery密码强度验证控件使用详解

编辑:2020欧洲杯冠军竞猜官方网站 本文来源:javascript调用服务端验证控件

关键词: 欧洲杯竞猜