javascript - ViewData 未通过 Jquery 显示

标签 javascript jquery ajax asp.net-mvc

我脑子一片空白,似乎找不到解决方案,但我确信它非常简单。

我有一个有 6 个 ViewData 的 Controller ,该操作是从 jquery ajax 请求调用的,然后我想将这些项目输入到各种 中文本框

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)
                    }
                });
            });
    });

Controller

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字段全部填充在 Controller 中,因此它必须是Jquery,谢谢,如果您有任何问题,请询问。 (我在适当的地方缩短了一些代码。

最佳答案

jQuery 正在执行 Ajax 调用,因此您无权访问 ViewData 对象。
为什么不从 Controller 返回 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 {});

}

如您所见, Controller 现在返回一个 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 对象。 如果出现问题,我的 Controller 会返回一个空对象。 您可以使用 jQuery.isEmptyObject(data) 进行检查。

现在,您的 success 回调应该接收 Controller 返回的对象。

关于javascript - ViewData 未通过 Jquery 显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32074876/

相关文章:

javascript - 将上一个和下一个按钮放在缩略图旁边

php - Magento - 在结帐页面上注册,然后通过 PayPal 付款

jquery - 如何使用 jQuery/AJAX 访问 views.py 中的变量?

javascript - 使用 HTML、CSS 和 Jquery 加载弹出窗口

jQuery 单击 _blank

javascript - AJAX 在按下按钮之前不会自动更新

javascript - 是否可以将 d3.js 与 gatsby.js 框架一起使用?

javascript - HTML5资源存储

javascript - 如何在 meteor-react 中使用 bootstrap 风格?

javascript - 关闭按钮未显示在 Bootstrap 可关闭警报上,但功能正常