JQuery调用后MVC视图不会更新
-
21-12-2019 - |
题
我正在构建一个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。