zoukankan      html  css  js  c++  java
  • 【转】 ASP.NET使用ICallbackEventHandler无刷新验证用户名是否可用

    功能说明:当用户在用户名输入框输入字符并焦点离开此输入框时,自动到数据库用户表中验证此用户名是否已被注册,如果已被注册,显示【不可用】,反之,显示【可用】,期间页面不刷新,读者也可以考虑将提示文字换成图片等更佳体验的提示方式。

      (只是的个Demo,没有考虑诸如Sql注入等问题,期间参考了网上的个别关于ICallbackEventHandler使用的案例。这个Demo是今天在首页看了某个大虾关于用ICallbackEventHandler无刷新获取服务器时间后做的,文章地址忘了,呵呵~,等找到后补上)。

    前台代码:

     1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Ver.aspx.cs" Inherits="Ver" %>
     2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     3  <html xmlns="http://www.w3.org/1999/xhtml">
     4  <head runat="server">
     5      <title>无标题页</title>
     6  
     7      <script language="javascript">
     8  function VerName() { 
     9   //传给后台的参数,在方法RaiseCallbackEvent()中实现
    10  var message = document.getElementById("txtName").value; 
    11  var context = ""; 
    12  <%=sCallBackFunctionInvocation%>;
    13 } 
    14 function ShowMessage(Mes, context) { 
    15   //Mes 是后台GetCallbackResult()的返回值
    16   var spMes =  document.getElementById("spMes");
    17   if(Mes == "true")  {
    18     spMes.innerHTML = "可用";
    19   } 
    20   else{
    21     spMes.innerHTML = "不可用";
    22   }
    23   
    24 }
    25     </script>
    26 </head>
    27 <body>
    28     <form id="form1" runat="server">
    29    <div>
    30         用户名:<asp:TextBox ID="txtName" runat="server" onblur="VerName()"></asp:TextBox>
    31         <span id="spMes"></span>
    32         <br />
    33         密&nbsp;&nbsp;&nbsp;&nbsp;码:<asp:TextBox ID="txtPwd" runat="server"></asp:TextBox>
    34     </div>
    35     </form>
    36 </html>
    View Code

    后台代码:

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Data.SqlClient;
    using System.Data.Common;
    
    public partial class Ver : System.Web.UI.Page,ICallbackEventHandler
    {
        public string sCallBackFunctionInvocation;
        //接收前台传入的值
        string userName = "";
    
        void Page_Load(object sender, System.EventArgs e)
        {
            //注册脚本到前台
            sCallBackFunctionInvocation = Page.ClientScript.GetCallbackEventReference(this, "message", "ShowMessage", "context");
        }
    
        #region ICallbackEventHandler 成员
    
        public string GetCallbackResult()
        {
            using (SqlConnection conn = new SqlConnection(
                System.Configuration.ConfigurationManager.AppSettings["ConnStr"]))
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                cmd.CommandText = string.Format(
                    "Select Count(*) From PUsers Where UserName='{0}'",
                    userName);
                conn.Open();
                if (int.Parse(cmd.ExecuteScalar().ToString()) == 1)
                {
                   return "false";
                }
                else
                {
                   return "true";
                }
            }
        }
        //接收前台参数
        public void RaiseCallbackEvent(string eventArgument)
        {
            userName = eventArgument;
        }
    
        #endregion
    }
  • 相关阅读:
    桶排序
    linux下如何修改进程优先级?
    在旋转排序数组之后的数组中找到目标值的位置(很多遍 ,总是晕)
    PHP生成随机数函数rand(min,max)
    使用PHP编写发红包程序
    maven的lifecycle
    mysq中char,varchar,text的区别
    contrller层的编码设设计流程以及详细配置
    mybatis的dao层和service层的编码设计的配置
    Next_day()函数的用法
  • 原文地址:https://www.cnblogs.com/694579350liuq/p/7079771.html
Copyright © 2011-2022 走看看