2012-01-07 115 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

相關問題