ViewData未通过Jquery显示

时间:2015-08-18 14:12:15

标签: javascript jquery ajax asp.net-mvc

我心不在焉,似乎无法找到解决方案,但我确信这很简单。

我有一个控制器有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,谢谢,请询问您是否有任何问题。 (我在适当的时候缩短了一些代码。

1 个答案:

答案 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回调应该会收到控制器返回的对象。