我正在使用 ASP.NET Core 6。我有一个 Razor 视图,其中有一个由 Ajax 调用填充的部分:
<div id="assessmentTablesDiv">
<!-- ...content... -->
</div>
这<div>
是通过以下调用填充的:
var assessmentTablesDiv = $('#assessmentTablesDiv');
var id = $('#adminDetailsAndOverviewId').val();
$.ajax({
url: "@Url.Action("LoadAssessmentTables", "Assessments")",
data: { id:id },
type: "GET",
success: function (data) {
assessmentTablesDiv.replaceWith(data);
}
});
<div>
被一个带有调用模态表单的按钮的部分视图所取代。
</div>
<div class="row">
<div class="col-md-12 mb-2 mt-2">
<button type="button" class="btn-sm btn-primary float-right"
data-toggle="ajax-modal" data-target="#mdAddAssessment"
data-url="@Url.Action("Create", "Assessments")"
title="Click add an assessment.">
Add Assessment
</button>
</div>
</div>
当我按下模式表单上的保存按钮时,数据被保存,模式关闭。然后我想运行 Ajax 调用来替换数据以assessmentTablesDiv
显示新保存的数据。
我尝试了以下代码,但它不起作用:
$("#btnSave").on('click', function (event) {
if (validate()) {
var viewModel = {
"AssessmentId": $('#assessmentId').val(),
"AdmissionDetailsAndReviewsId": $('#adminDetailsAndReviewsId').val(),
"AssessmentTypeId": $('#AssessmentSelectionId').val(),
"DateMostRecent": $('#dateMostRecent').val(),
"IQSpecifyOrOther": $("#iqSpecifyOrOther").val(),
"Score": $('#score').val(),
}
$.ajax({
type: "POST",
url: "@Url.Action("SaveGeneralAssessment", "Assessments")",
headers: { "RequestVerificationToken": "@GetAntiXsrfRequestToken()" },
datatype: "json",
data: viewModel,
async: false,
success: function (response) {
$('#mdAddAssessment').modal('hide')
reloadAssessment();
},
failure: function (response) {
alert(JSON.stringify(response));
},
error: function (response) {
alert(JSON.stringify(response));
}
});
};
});
function reloadAssessment() {
var assessmentTablesDiv = $('#assessmentTablesDiv');
var id = $('#adminDetailsAndOverviewId').val();
$.ajax({
url: "@Url.Action("LoadAssessmentTables", "Assessments")",
data: { id: id },
type: "GET",
success: function (data) {
assessmentTablesDiv.replaceWith(data);
}
});
}
我不想重新加载整个页面,因为页面上输入的任何其他未保存的数据都将丢失。
有什么想法吗?
谢谢
.html()
而是.replaceWith():
保留了#assessmentTablesDiv
元素,避免了事件绑定并发症的发生。.done()
使用和异步处理成功和失败.fail()
它应该能够顺畅地重新加载,而无需重新加载页面。