杨洋疯狂C# 刊号:201208 第1期----ASPNET验证(一)

 一、正则表达式初接触  

       

    时间:2012年08月08日 15点         地点:上海             天气:”海葵“台风


      掌握目标:Asp.NET里面的正则验证,JS提示处理结果的几种方式

      涉及内容:System.Text.RegularExpressions,Asp.NET的工具箱里面的验证工具使用,JQuery版的前端验证,JQuery验证插件的使用,正则表达式元字符的学习和使用,通用的,一个正则表达式工具的介绍和使用,后台JS提示方式等

      案例:一个注册页面的验证(主要前端),一个注册页面用Asp.NET写的页面,一个自定义具有验证功能的自定义控件

      

      ① .NET版本验证(System.Text.RegularExpressions)

      案例1:验证电话号码---------学习^$,?,{},(),\d

      总代码:       

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!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></title>
</head>
<body>
    <form id="validateForm" runat="server">
    <div>
        <asp:TextBox ID="txtPhoneValidate" runat="server"></asp:TextBox>
        <asp:Button ID="btnPhoneValidate"
            runat="server" Text="验证电话号码" onclick="btnPhoneValidate_Click" />
    
    </div>
    </form>
</body>
</html>

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text.RegularExpressions;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    #region 电话号码验证
    //①验证电话号码XXXX-XXXXXXXX(前面3个或4个,后面6个或7个或8个)
    //    \d代表数字,{}限定前面这个元字符的长度,这里{3,4}表示3个数字或者4个数字,你懂的^$表示一段正则的开始和结束,括弧表示一个整体
    //  “? 号表示0次或者1次
    public bool isTelephone(string phoneValidate)
    {
        return Regex.IsMatch(phoneValidate, @"^(\d{3,4}-)?\d{6,8}$");
    }

    protected void btnPhoneValidate_Click(object sender, EventArgs e)
    {
        //  if (Page.IsValid) {  //获得一个值表示此页面是否验证成功!
        if (isTelephone(txtPhoneValidate.Text))
        {
            //用JS提示的3种方法
            //①response.write()
            string scripts = "<script>alert('电话号码验证成功');</script>";
            Response.Write(scripts);
        }
        else {
            string scripts = "<script>alert('电话号码验证失败');</script>";
            Response.Write(scripts);
        
        }
        //      }
    }
    #endregion
}

     

      其他学习(几种JS提示的区别):      

      最开始源代码的样子 ↓

   

     图片1

      分支①(Reponse.Write的JS提示):

      I . Response.Write模式JS提示完的样子(上面多了一句脚本)

      

     JS提示

     

     JS提示

     

     II. Page.ClientScript.RegisterClientScriptBlock()

     由下图看到了它有3个参数,下面也有说明

     JS2提示

     把Reponse.Write注释后,换成这种JS提示方法,网页源码变成了这样

   if (isTelephone(txtPhoneValidate.Text))
        {
            //用JS提示的3种方法
            //①response.write()
            string scripts = "<script>alert('电话号码验证成功');</script>";
            //Response.Write(scripts);
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"phoneValidateSuccessTip",scripts);
        }
        else {
            string scripts = "<script>alert('电话号码验证失败');</script>";
            //Response.Write(scripts);
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "phoneValidateSuccessTip", scripts);
        }

 

 

 

 

       

       III. Page.ClientScript.RegisterStartupScript()

       也是3个参数:

       

       

       

       IV. 其实还有一种提示技巧,在前台页面添加一个Literal控件

<form id="validateForm" runat="server">
<div>
<asp:Literal ID="ltResult" runat="server"></asp:Literal>
<asp:TextBox ID="txtPhoneValidate" runat="server"></asp:TextBox>
<asp:Button ID="btnPhoneValidate"
runat="server" Text="验证电话号码" onclick="btnPhoneValidate_Click" />
</div>
</form>

 

             

 

 

 

 

 

 

 

      后台代码

//  if (Page.IsValid) {  //获得一个值表示此页面是否验证成功!
        if (isTelephone(txtPhoneValidate.Text))
        {
            //用JS提示的3种方法
            //①response.write()
            string scripts = "<script>alert('电话号码验证成功');</script>";
            //Response.Write(scripts);
            //Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"phoneValidateSuccessTip",scripts);
            //Page.ClientScript.RegisterStartupScript(this.GetType(), "phoneValidateSuccessTip", scripts);
            ltResult.Text = scripts ;
        }
        else {
            string scripts = "<script>alert('电话号码验证失败');</script>";
            //Response.Write(scripts);
            //Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "phoneValidateSuccessTip", scripts);
            //Page.ClientScript.RegisterStartupScript(this.GetType(), "phoneValidateFailTip", scripts);
            ltResult.Text = scripts;
        }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

      页面提示网页源代码,literal控件的位置变成一行JS代码块了

      

     

     

 

      应该在后台提示js的方法肯定还有,在我提示的这几个里面   RegisterStartupScript()提示时候,浏览器没有先白屏然后再跳转回去,其他的都是白屏过后

      

     

 

     其他:

     当使用者第一次浏览这个网页时Page.IsPostBack 会传回False,所以一般用if(!Page.IsPostBack){ 第一次浏览我就这样做,比如绑定数据 } 

     Page.IsValid等于True的话,则整个页面验证通过,常和asp.net的相关验证控件配合

     为了避免注册重复脚本,可以用以下方式判断

     Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(),"键名称") 验证 RegisteredClientScriptBlock()方式的script键名

     Page.ClientScript.IsStartupScriptRegistered(this.GetType(),"键名称") 验证 RegisteredStartupScript()方式的script键名

     普通HTML标签可以在后台访问该元素:正常写HTML标签,然后加一个runat="server"和 id

     例如:

<input id="btnDel"  type="submit" value="删除" runat="server"/>  <%--给这个按钮在后台添加个属性--%>

 

 

         

      后台给它添加个属性,IsPostBack和Page.IsPostBack是一样的 

     if (!IsPostBack) {
            this.btnDel.Attributes.Add("onclick","return confirm('是否删除')");
        }

 

 

 

 二、对IsPostBack 测试的补充 
       ①准备好另一个aspx或者其他页面 ,我的是ValidateSuccess.aspx,里面就验证成功4个字

       ②在Page_Load添加如下代码,F5运行时直接跳转到ValidateSuccess.aspx页面去了,然后改变地址栏地址为Default.aspx也无效,这就是页面第一次加载执行的代码,很无聊      

           对吧,我也这么认为

  //测试Page.IsPostBack
        if (!Page.IsPostBack)
        {
            Response.Redirect("ValidateSuccess.aspx");
        }

 

 

 

 

 

 

 

       ③把!号去掉,表示第二次访问该页面时触发跳转到其他页面去,页面直接显示Default.aspx的内容了,此时单击验证按钮,不管是否验证成功,也不提示JS指定脚本了,直接跳到ValidateSuccess.aspx页面去了,因为ASP.NET存在着 回发机制 ,这里不赘述了,别人讲的比我好,如果你不会想知道,你可以搜索  ”asp.net回发机制“关键字来学习

回发机制相关链接:http://blog.sina.com.cn/s/blog_7815564501012qgy.html

                               http://jerikc.blog.163.com/blog/static/18943418620111173354795/

       

       ④把Response.Redirect("ValidateSuccess.aspx");注释掉,在Page_Load事件里添加   btnPhoneValidate.PostBackUrl = "ValidateSuccess.aspx";

           按F5运行,点击按钮,直接回发到了ValidateSuccess.aspx页面去了

       

       ⑤在前台的那个验证按钮里面加上 OnClientClick="return false;" 阻止回发,但是这不是关键,我们常常在 OnClientClick="一个定义好的JS函数名称",例如这个JS函数名称        

          叫做A,A里面的JS代码用来验证页面上的元素或者其他的,如果在这个函数里面加了个return true;那么接着就会调用 onclick事件的代码了。所以PostBackUrl我个人认为没        

          什么用,当超链接吗?其实超链接还有LinkButton和HyberLink;再说还有HTML标签里面就有个<a>,直接在前台拼接它的链接地址就行了,这里不做赘述了,我个人感觉        

         能少用服务器控件就少用

       <asp:Button ID="btnPhoneValidate"
            runat="server" Text="验证电话号码" onclick="btnPhoneValidate_Click" OnClientClick="return false;"/>

 

 

 

 

      ⑥上一期,自己犯了一个很大的错误,就是把所有要写的东西写在了一个页面里了,查看很不方便,从这期开始,将分随笔写好,然后放在索引页里面仅供参考。代码不上传了,很简单,要的可以qq联系。这次写的很简单,不好意思

 
 
 
 
 
 
posted @ 2012-08-08 23:38  AYUI框架  阅读(1869)  评论(4编辑  收藏  举报