2012-12-10 41 views
2

我正在編寫一些代碼,用戶可以在提交表單之前檢查數據庫中是否存在用戶名。這可以通過onkeyup事件處理程序來處理,該處理程序從文本框中獲取值並將其傳遞給使用字符串參數調用ActionResult方法的ajax請求。我的SQL邏輯工作正常,我收到一個說已存在或不存在的值。MVC 3 Razor - 在Ajax請求中訪問ViewData

我有的問題是從我的控制器,我想返回值。在我的JQuery Ajax請求的成功部分,我試圖訪問我的ViewData [「索引名稱」],但我的警報顯示一個空字符串。

Javascript代碼:

function searchUsername() { 
    var filters = getFilterVals(); 
    $.ajax({ 
     url: '@Url.Action("UsernameSearch", "UserManager")', 
     type: "POST", 
     async: true, 
     dataType: "text", 
     data: "username=" + filters.username, 
     success: function() { 
      var str = '@ViewData["UserName"]'; 
      alert(str); 
      $('#txtUsernameExists').val(str); 
      configureGui(); 
      jQueryTableStyling(); 
     }, 
     error: function (data) { 

     } 
    }); 
} 

function getFilterVals() { 
    filters = new Object(); 
    filters.username = $('#createuser-usernamesearch #user_name').val(); 
    return filters; 
} 

C#控制器代碼:

public ActionResult UsernameSearch(string username) 
{ 
    string output = DAL.usernameSearch(username); 
    ViewData["Username"] = output; 
    return PartialView("~/Views/Partial/_txtUsernameSearch.cshtml"); 
} 

我在做什麼錯?歡迎任何建議。

回答

4

ASP.NET:

public JsonResult UsernameSearch(string username) 
{ 
      string output = DAL.usernameSearch(username); 

      return Json(new 
      { 
       Html = PartialView("~/Views/Partial/_txtUsernameSearch.cshtml"), 
       Username = output 
      }); 
} 

JS:

$.ajax({ 
      url: '@Url.Action("UsernameSearch", "UserManager")', 
      type: "POST", 
      async: true, 
      dataType: "json", 
      data: "username=" + filters.username, 
      success: function (data) { 

       var html = data.Html; 
       var str = data.Username; 
       alert(str); 

       $('#txtUsernameExists').val(str); 
       configureGui(); 
       jQueryTableStyling(); 
      }, 
      error: function (data) { 

      } 
     }); 
+0

它的工作!我確實必須稍微改變JavaScript。有一個用戶名不是小寫字母的拼寫錯誤,但除此之外它運行得很好。謝謝! –

0

試試這個:

變化:

ViewData["Username"] = output; 

對於這一點:

ViewData["UserName"] = output;