这让我们感到困惑,不确定我们是否遇到了一个错误,或者是否有我们遗漏的东西。
我有一个包含动态行数的页面的一部分,每个页面上都有一个删除按钮,它向返回局部视图的方法执行JQuery发布。
function removeRow(panelName) {
var deferredObject = $.Deferred();
$.post("Resumes/RemovePanelRow", $('form').serialize() + "&panelName=" + panelName, function (partialView) {
$('#' + panelName).html(partialView);
$('#' + panelName).unobtrusiveUI();
deferredObject.resolve();
});
return deferredObject.promise();
}
单击“删除”按钮会将隐藏的删除值指定为true。该方法从表单中获取视图模型,并删除任何值设置为true的行。然后它返回一个局部视图。
[HttpPost]
public PartialViewResult RemovePanelRow(ResumeVM resume, string panelName)
{
var allEdu = resume.Education.Where(x => x.Remove == true).ToList();
foreach (var edu in allEdu)
{
resume.Education.Remove(edu);
}
return PartialView("PartialViews/_newEducation", resume);
}
部分查看_newEducation.cshtml:
@model ResumeTracking.Models.ViewModels.ResumeVM
@Html.EditorFor(model => model.Education)
EditorFor只返回一个表格行。
问题在于,无论您单击“删除”按钮的哪一行,它都会删除最后一行。
在调试时,我们在返回到jquery函数之前查看局部视图结果,它看起来是正确的。该模型包含最后一行,并且只删除了已删除的行。一旦返回到jquery,partialView变量就与方法返回的内容不匹配。
答案 0 :(得分:0)
如果有人有兴趣,修复是在返回局部视图之前添加它:
ModelState.Clear();
渲染视图时模型状态未更新。