Ajax 实现用户名是否存在 with ScriptManager

本文介绍了一种利用PageMethods实现用户名实时验证的方法,通过Ajax技术在用户输入时即时反馈用户名是否可用,提升用户体验。

        网站的注册页面上面,经常会检查用户名的存在 ,有以下几种方法:

       1. 点提交按钮之后, 显示用户名是否存在

       2. 套用一个UpdatePanel, 在Textbox 的 TextChange 事件中处理 用户名是否存在事件

       3. 使用Ajax pro

  第1种方法:

    现在已经没有什么网站用了, 主要需要刷新页面之后,才能知道结果,用户体验很不好

  第2种方法:

     一个看起来是不用刷页面的方法, 其实还是有PostBack, 只不过是异步处理而已。

     最大的缺点:在下一个Textbox 中输入值得时候, 光标经常会飞。 主要原因是上面一个事件没有处理完,这个 输入事件不会及时的响应。

第3种方法:

   现在用的比较多的一个方法, 需要引入Ajax pro dll,  按里面的规则来实现, 感觉上很麻烦的,最不爽的事情是我按提供的sample, 不能实现相应的效果,所以就基本上没有使用。

在 ScriptManager 提供了 PageMethods 方法, 能够实现和 Ajax pro 一样的功能

为了能使用PageMethods , 首先要在 ScriptManager  中设置 EnablePageMethods="true"

 <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />

我们的注册页面(Register.aspx),在 Register.aspx.cs 中加入检验用户名是否存在的静态方法

[WebMethod]
 
public static bool IsUserAvailable(string username)
 
{
     User user 
= GetUser(username);

      
if (user == null)
       
{
            
return true;
        }

        
else
        
{
              
return false;
        }

 }

这个静态方法一定要加上一个[WebMethod] 属性, 引用System.Web.Services 命名空间

定义页面属性, 停止输入的时候,检查用户名是否存在

 <asp:Label ID="lblUserName" runat="server" AssociatedControlID="UserName">用户名</asp:Label>
 
<asp:TextBox ID="UserName"  runat="server" CssClass="txt" onkeyup="usernameChecker(this.value);" />
 
<span id="spanAvailability"></span>
        

最后一步,也是最重要的一步,定义script

 <script type="text/javascript">
  
var usernameCheckerTimer;
   
var spanAvailability = $get("spanAvailability");

    
function usernameChecker(username) 
     
{
          clearTimeout(usernameCheckerTimer);
           
if (username.length == 0)
                spanAvailability.innerHTML 
= "";
           
else
            
{
                    spanAvailability.innerHTML 
= "<span style='color: #ccc;'>checking...</span>";
                    usernameCheckerTimer 
= setTimeout("checkUsernameUsage('" + username + "');"750);
             }

       }


     
function checkUsernameUsage(username) 
     
{
         
// initiate the ajax pagemethod call
          // upon completion, the OnSucceded callback will be executed
              PageMethods.IsUserAvailable(username, OnSucceeded);
     }


      
// Callback function invoked on successful completion of the page method.
      function OnSucceeded(result, userContext, methodName) 
      
{
            
if (methodName == "IsUserAvailable")
            
{
                
if (result == true)
                    spanAvailability.innerHTML 
= "<span style='color: DarkGreen;'>Available</span>";
                
else
                    spanAvailability.innerHTML 
= "<span style='color: Red;'>Unavailable</span>";
             }

       }

 
</script>    

在checkUsernameUsage(username)方法中

使用了PageMethods.IsUserAvailable(username, OnSucceeded); 方法, 使用PageMethods 的时候无智能提示。 在javascript中的IsUserAvailable和后台的 相比多了一个 OnSucceeded方法,这个方法是必须要的, 不然你的返回结果无地方进行处理。

OnSucceeded 方法对IsUserAvailable 执行完之后进行处理。result 是返回的结果, methodName 是 后台调用方法的名字, 多个后台方法能共用一个OnSucceeded 。

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值