首页 > 技术文章 > 【转】 ASP.NET使用ICallbackEventHandler无刷新验证用户名是否可用

694579350liuq 2017-06-26 11:40 原文

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

  (只是的个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
}

 

推荐阅读