我正在构建一个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从不更新电子邮件地址。
为长篇文章道歉,但我想尽可能多地提供详细信息,以便解决这个问题,因为我已经在这一天工作了一天而没有任何成功。
任何帮助都会非常感激。
感谢。
答案 0 :(得分:2)
据我所知,您没有在任何地方使用$.ajax
通话结果。您只需显示警报即可完成。您需要在结果中使用数据,但是当您返回整个View
而不仅仅是PartialView
时,最好只重定向更改下拉列表:
$("#UserID").change(function()
window.location.href = "/Dashboard/Index/" + $(this).val();
);
您还可以使用@Url.Action("Index", "Dashboard")
来避免硬编码网址。