js验证注册用户名重复

在注册页面及某些对象新增页面往往会用到验证数据库中是否已存在该对象。如果调用后台去访问数据库,显示要等用户提交后,刷新页面。下面介绍一种常用方法,用js+webservice实现无刷新验证;

为避免数据库中的表名暴露给客户端,可在数据库中新建一个表:Tsys_TableConfuse,用来存储需要验证的表名,及表的编码,这样就可以把表编码暴露给客户端,然后再通过编码来取表名。另外,如果安全级别较高的话,也可以建个表,存储要验证的表字段,用来转换。

如要验证tsys_user中NAME和DEPART字段中是否存在“张三”,“销售部”

首先在表Tsys_TableConfuse 中增加"001" ,"tsys_user"

先建立一个webservice

 

   /// <summary>
    /// 检测表中的列值是否重复
    /// </summary>
    /// <param name="tabMark">表的编码</param>
    /// <param name="columns">列名列表,用逗号隔开</param>
    /// <param name="colValues">列值列表,用逗号隔开</param>
    /// <returns></returns>
    [WebMethod]
    public string CheckObjectExist(string tabMark, string columns, string colValues)
    {
        ClassLibrary1.Factory.WebServiceFactory clsLib = new ClassLibrary1.Factory.WebServiceFactory();
        ClassLibrary1.Interface.IWebService iwebservice = clsLib.getWebService();
        string strResult = iwebservice.checkObiectExist(tabMark, columns, colValues);
        return strResult;
    }

然后在后台的实现ClassLibrary1.Interface.IWebService 的checkObiectExist方法


        public string checkObiectExist(string strTable, string strColumns, string strValues)
        {
            try
            {
                SqlConnection conn = new SqlConnection();
                SqlParameter parms = new SqlParameter();
                conn.ConnectionString = ConfigurationSettings.AppSettings["DBConnection"].ToString();
                SqlCommand scmd = new SqlCommand();
                scmd.Connection = conn;
                string[] strColArr = strColumns.Split(',');
                string[] strValueArr = strValues.Split(',');
                if (strColArr.Length != strValueArr.Length)
                {
                    throw new Exception("传值参数有误!表名:"+strTable+";列:"+strColumns+";值:"+strValues);
                }

                //取表名
                string strgetTable = "select TABNAME from Tsys_TableConfuse where TABNO=@TABNO";
                SqlParameter parms2 = new SqlParameter();
                parms2.ParameterName = "TABNO";
                parms2.Value = strTable;
                scmd.CommandText = strgetTable;
                scmd.Parameters.Add(parms2);
                conn.Open();
                string tableResult = scmd.ExecuteScalar().ToString();
                conn.Close();

                //检查是否有重复
                scmd = new SqlCommand();
                scmd.Connection = conn;
                string strsql= "select count(1) from "+tableResult+" where 1=1 ";
                StringBuilder sb = new StringBuilder();

                for (int i = 0; i < strValueArr.Length; i++)
                {
                    parms.ParameterName = strColArr[i];
                    parms.Value = strValueArr[i];
                    sb.Append(" and ");
                    sb.Append(strColArr[i]);
                    sb.Append(" = @");
                    sb.Append(strColArr[i]);
                    scmd.Parameters.Add(parms);
                }
                strsql = strsql + sb.ToString();
                scmd.CommandText = strsql;
                conn.Open();
                string strResult = scmd.ExecuteScalar().ToString();
                conn.Close();
                return strResult;
            }
            catch (Exception ex) {
                string strLog = ex.Message;
                //
                //TODO:日志记录
                //
                return "";
            }
        }

 

 

在客户端首先注册该webservice服务


        <asp:ScriptManager ID="ScriptManager1" runat="server">
            <Services>
                <asp:ServiceReference Path="~/WebService.asmx" />
            </Services>
        </asp:ScriptManager>

然后,通过文本框的onblur方法调用如下方法


        function cheName() {
            WebService.CheckObjectExist("001", "NAME,DEPART", "张三,销售部", processResult);
        }
        function processResult(result) {
            //返回记录条数,如果大于0,说明对象已存在        }
    </script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值