我有一个引导程序模式,该模式允许用户更新其帐户的某些信息。实际上,我想在提交表单时保持模式打开,因为如果用户提交表单,则默认的模式会被页面刷新关闭。
为此,我在模态中添加了以下形式:
@model Demo.ViewModels.UserProfileViewModel;
<form asp-controller="User" asp-action="UpdateUser" asp-antiforgery="true" id="userInformations">
<div class="form-group">
<label class="col-lg-3 control-label">Email</label>
<div class="col-lg-12">
<input class="form-control" type="text" asp-for="User.Email" value="@Model.User.Email" />
</div>
<div class="form-group">
<label class="col-lg-3 control-label">Password</label>
<div class="col-lg-12">
<input class="form-control" asp-for="User.??" type="password" value="?" />
</div>
</div>
<button type="submit">Update</button>
</div>
其中UserViewModel
是包含要更新字段的对象。
为防止模式关闭,我创建了一个具有以下内容的javascript函数:
$('#userInformations').on("submit", function (event) {
event.preventDefault();
$.ajax({
url: "some url",
type: "POST",
data: some data,
success: function (result) {
console.log(result)
}
});
});
我被困在ajax
部分,特别是我需要调用UpdateUser
控制器中可用的方法User
:
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult UpdateUser(UserProfileViewModel updateUser)
{
if (ModelState.IsValid)
{
updateUser = _repo.UpdateUser(updateUser);
}
return RedirectToAction("Profile");
}
主要问题是:我不知道如何执行此操作,并且实际上没有找到任何相关内容,因此我不知道这是否可行,或者情况比这更简单。
更新
根据建议:
$.ajax({
url: this.action,
type: "POST",
data: this.serialize,
success: function (result) {
alert(true);
console.log(result)
},
error: function (data) {
console.log(data);
}
});
答案 0 :(得分:0)
您所拥有的一切都很好。对于URL,只需使用this.action
。对于数据,请使用this.serialize()
。