2012-01-07 113 views
1

我正在处理一个具有注册表单的应用程序,我必须向用户显示用户名是否存在。 我正在使用asp.net mvc3并计划使用AJAX来实现此目的。如何在asp.net中使用ajax检查用户名是否已经存在?

我有一个表格

<tr> 
<td>User Name*</td> 
<td><input id="UserName" name="UserName" type="text" onblur="check(this.value);"/></td> 
<td id= "UName"></td> 
</tr> 

它调用具有folling内容

function check(User) { 
    ... 
    var url = "/UserNameCheck/Index"; 
    url += "?User=" + User; 
    xmlHttp.onreadystatechange = state_Change; 
    xmlHttp.open("GET", url, true); 
    xmlHttp.send(null); 
} 
function state_Change() { 
    if (xmlhttp.readyState == 4) {// 4 = "Response loaded" 

     if (xmlhttp.status == 200) {// 200 = Response Error Free    
      document.getElementById("UName").innerHTML = xmlHttp.responseText 
     } 
     else { 
      alert("Problem retrieving XML data"); 
     } 
    } 
} 

我惊动了用户名和我得到的是我已经输入了正确的值.js文件。现在,URL是/ UserNameCheck/Index,其中UserNameCheck是一个控制器,Index是其中的一个方法。

控制器有这个代码。

public ActionResult Index(string User) 
     { 
      string UserName; 
      try 
      { 
       Response.Cache.SetCacheability(HttpCacheability.NoCache); 
       UserName = Request.QueryString["User"]; 
       ConnectionPackage.ConnectionClass cc = new ConnectionPackage.ConnectionClass(); 
       conn = cc.con; 
       string sql = "Select UserName FROM UserDetails where UserName = '" + UserName + "'"; 
       conn.Open(); 
       SqlCommand cmd = new SqlCommand(sql, conn); 
       cmd.CommandType = CommandType.Text; 
       object p = cmd.ExecuteScalar(); 
       cmd.ExecuteNonQuery(); 
       string u = (string)p; 
       if (u.Length==0 || u.Equals("NULL") || u.Equals("null")||u.Equals("Null")) 
       { 
        return View(); 
       } 

       return null; 
      } 
      catch (Exception ex){ 
      } 

和视图具有

String buffer = " <table><tr><td id = 'UName' >" This user name already exists. Please select some other unser name. 
buffer = buffer + "</td></tr></table>"; 
response.getWriter().println(buffer); 

我也试着写

Response.Clear(); 
Response.Write("UserName already exists. Please select another UserName"); 
Response.End(); 

而不是返回查看。 但在这两种情况下,即使我输入了数据库中已经存在的用户名,我也没有收到用户名存在的消息。

连接字符串适用于插入数据库,所以我不认为有问题。我在js文件中提到的URL有问题吗?或者我的整个方法错了? 我基本上来自java背景,所以不太了解asp.net。请帮忙。

非常感谢您提前。

回答

1

你做得好,但你可以让自己更容易一些。如果你使用Razor使用MVC3,你的应用程序已经安装了jQuery。

  1. 使用$.ajax()方法来执行,以检查这些名称控制器的号召......

  2. 绑定$。阿贾克斯()调用“悄悄地”,这意味着,而不是在你的HTML控件,从jquery/javascript将事件绑定到您的控件。

  3. 其次,如果你想一点点花哨的表现,你可以通过live() jQuery函数或keyup绑定事件,所以,当你键入的Ajax调用是由你找出实时。

最终你会以很少的JavaScript结束,你的JS的东西将从你的标记干净地分离。

只要你的控制器动作正在进行,玩起来和学习看起来很好,但你想要考虑(a)将SQL语句作为存储过程放在数据库服务器上并调用它,或者(b)编写一个存储库模式类,然后使用LINQ在数据库提取后执行查询。

另一种可能性是通过NuGet使用Entity Framework 4.1来消除这两种需求。它可以有一些学习曲线,但有很多好的东西,你的例子很容易开始。

让我知道你是否对你的代码有任何特定的问题,我可以提供更详细的答案。

+0

非常感谢你。但老实说,我以前没有使用过jQuery。你能否提供任何好的资源供我学习。如果它也有实际的例子,那将会很棒。 非常感谢你。 – Sathya 2012-01-07 06:02:22

+0

@Sathya以最有信誉的来源开始 - 它是业主。 http://docs.jquery.com/Tutorials - 我认为你会发现它非常易于使用......当你完成一两个教程时......看看我提到的“live”和“keyup”事件和谷歌几个例子。这是蛋糕。 – 2012-01-09 18:08:07

相关问题