MVC JQuery帖子没有返回正确的部分视图结果

时间:2016-02-04 15:31:35

标签: jquery asp.net-mvc

这让我们感到困惑,不确定我们是否遇到了一个错误,或者是否有我们遗漏的东西。

我有一个包含动态行数的页面的一部分,每个页面上都有一个删除按钮,它向返回局部视图的方法执行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变量就与方法返回的内容不匹配。

1 个答案:

答案 0 :(得分:0)

如果有人有兴趣,修复是在返回局部视图之前添加它:

ModelState.Clear();

渲染视图时模型状态未更新。