我心不在焉,似乎无法找到解决方案,但我确信这很简单。
我有一个控制器有6个ViewData
,这个动作是从jquery ajax
请求中调用的,然后我想将这些项输入到各种textboxes
。
JQuery的
$("#tableid").click(function () {
///EXTRACT DATA FROM TABLE ROW
var insertText = $(this).text();
$.ajax({
url: '@Url.Action("UserDetails", "Home")',
data: { 'userLogin': insertText },
type: "post",
cache: false,
success: function () { <===== PROBLEM SOMEWHERE IN THIS FUNCTION
var userID = ViewData["userID"];
var userName = ViewData["userName"];
var userFName = ViewData["userFName"];
var userSName = ViewData["userSName"];
var userEmail = ViewData["userEmail"];
var userActive = ViewData["userActive"];
$('#txtUL').empty().append(userID)
$('#txtUI').empty().append(userName)
$('#txtFN').empty().append(userFName)
$('#txtSN').empty().append(userSName)
$('#txtE').empty().append(userEmail)
$('#txtA').empty().append(userActive)
}
});
});
});
控制器
public ActionResult UserDetails(string userLogin)
{
if (userLogin != null)
{
Manager manager = new Manager();
var details = manager.GetUserData(userLogin);
var userID = details.Id;
var userName = details.Login;
var userFName = details.FirstName;
var userSName = details.Surname;
var userEmail = details.Email;
var userActive = details.Active;
ViewData["userID"] = userID;
ViewData["userName"] = userName;
ViewData["userFName"] = userFName;
ViewData["userSName"] = userSName;
ViewData["userEmail"] = userEmail;
ViewData["userActive"] = userActive;
}
return View("Index");
}
调试时,ViewData
字段全部填充在控制器中,因此它必须是Jquery,谢谢,请询问您是否有任何问题。 (我在适当的时候缩短了一些代码。
答案 0 :(得分:3)
jQuery正在进行Ajax调用,因此您无法访问ViewData
对象。
为什么不从控制器返回json对象?
public JsonResult UserDetails(string userLogin)
{
if (string.IsNullOrEmpty(userLogin))
{
return Json(new {});
}
Manager manager = new Manager();
var details = manager.GetUserData(userLogin);
if (details != null)
{
return Json(new {userID = details.Id, userName = details.Login, userFName = details.FirstName, userSName = details.Surname, userEmail = details.Email = details.Active});
}
return Json(new {});
}
如您所见,控制器现在返回JsonResult
您的javascript应如下所示:
$.ajax({
url: '@Url.Action("UserDetails", "Home")',
data: { 'userLogin': insertText },
type: "POST",
dataType: 'json',
cache: false,
success: function (data) {
if (!jQuery.isEmptyObject(data)) {
$('#txtUL').empty().append(data.userID)
$('#txtUI').empty().append(data.userName)
$('#txtFN').empty().append(data.userFName)
$('#txtSN').empty().append(data.userSName)
$('#txtE').empty().append(data.userEmail)
$('#txtA').empty().append(data.userActive)
}
}
})
我已经添加了dataType: 'json'
,因为您期待一个json对象。
我的控制器返回一个空对象,以防出现问题。
您可以使用jQuery.isEmptyObject(data)
进行检查。
现在,您的success
回调应该会收到控制器返回的对象。