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

当用户登录到站点并通过身份验证时,它们将被定向到控制器中的索引方法。此方法接受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,然后传递到视图,然后将他们的电子邮件地址写入UI。

@model MyApp.UI.ViewModels.DashboardViewModel

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

一旦用户查看UI,他们就可以从下拉列表中选择其他用户。当他们这样做时,选定的用户电子邮件地址应该在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从下拉列表传递回控制器中的索引方法。索引方法,这一次,意识到id不是NULL,因此,执行查询以获取所选用户的详细信息,根据他们的id(见上面的索引方法)。

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

@model MyApp.UI.ViewModels.DashboardViewModel

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

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

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

很抱歉长的帖子,但我想给尽可能多的细节,试图解决这个问题,因为我已经在这个工作了一天没有任何成功。

任何帮助将不胜感激。

谢谢.

有帮助吗?

解决方案

据我所知,你没有使用你的 $.ajax 在任何地方调用结果。你只要保持警惕就行了。您需要使用结果中的数据,但是当您返回整个数据时 View 而不仅仅是一个 PartialView 在更改下拉列表时重定向可能更好:

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

您也可以使用 @Url.Action("Index", "Dashboard") 以避免硬编码url。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top