MVC View在JQuery调用后无法更新

时间:2014-04-11 10:40:19

标签: jquery asp.net-mvc asp.net-mvc-5

我正在构建一个MVC 5 Web应用程序。在布局模板中,有一个下拉列表,其中包含用户名列表。由于此下拉列表位于布局模板中,因此可以在从模板继承的所有视图中访问它。

当用户登录站点并通过身份验证时,会将其定向到Controller中的Index方法。此方法接受int类型的可空ID。当用户登录时,传递给Index方法的id始终为null。然后,我获取登录的用户ID并进行查询以获取其详细信息(请参阅下文)。

    public ActionResult Index(int? id)
    {
        DashboardViewModel model = new DashboardViewModel();

        if(id == null || id == 0)
        {
            User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
            model.SelectedUser = user;
        }
        else
        {
            model.SelectedUser = _userService.GetUserByID(id.Value);
        }

        return View(model);
    }

我将他们的详细信息传递给ViewModel,然后传递给View,然后将其电子邮件地址写入UI。

@model MyApp.UI.ViewModels.DashboardViewModel

<h1>@Model.SelectedUser.email</h1>

用户查看用户界面后,可以从下拉列表中选择其他用户。当他们这样做时,所选用户的电子邮件地址应该替换他们的UI。

这个过程就像这样。用户从下拉列表中选择一个名称,称为JQuery函数

$(document).ready(function () {

    $("#UserID").change(GetUser);

    function GetUser() {

        $.ajax({
            type: "GET",
            url: '/Dashboard/Index/',
            data: { id: $(this).val() },
            error: function () {
                alert("An error occurred.");
            },
            success: function () {
                alert("success");
            }
        });
    }
});

此函数将ID从下拉列表传递回Controller中的Index方法。 Index方法,这次,实现id为NOT NULL,因此,执行查询以根据其id获取所选用户的详细信息(参见上面的索引方法)。

细节再次放入ViewModel并传递给View。传递给View的模型包含所选用户的详细信息,然后应将其电子邮件地址写入UI

@model MyApp.UI.ViewModels.DashboardViewModel

<h1>@Model.SelectedUser.email</h1>

但是,这就是我的问题所在。虽然我可以单步执行代码,看到所有内容都按预期工作,但无论我从下拉列表中选择哪个用户,它都不会更改写入UI的电子邮件地址。

这很奇怪,因为我可以看到所选用户的详细信息被传递到ViewModel,但是,UI从不更新电子邮件地址。

为长篇文章道歉,但我想尽可能多地提供详细信息,以便解决这个问题,因为我已经在这一天工作了一天而没有任何成功。

任何帮助都会非常感激。

感谢。

1 个答案:

答案 0 :(得分:2)

据我所知,您没有在任何地方使用$.ajax通话结果。您只需显示警报即可完成。您需要在结果中使用数据,但是当您返回整个View而不仅仅是PartialView时,最好只重定向更改下拉列表:

$("#UserID").change(function()
    window.location.href = "/Dashboard/Index/" + $(this).val();
);

您还可以使用@Url.Action("Index", "Dashboard")来避免硬编码网址。