2016-02-04 64 views
0

这让我们难以置信,不确定是否遇到错误或者是否有我们错过的东西。MVC JQuery发布不返回正确的部分视图结果

我有一个页面的一部分,其中包含一个动态的行数,每个做一个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

使用$ .get而不是$ .post –

回答

0

如果有人有兴趣,修复是返回局部视图之前,补充一点:

ModelState.Clear(); 

未更新模型状态时,它呈现的视图。

+0

更多信息在这里:http://stackoverflow.com/questions/1775170/asp-net-mvc-modelstate-clear –

+0

更多[信息](http:// stackoverflow.com/questions/26654862/textboxfor-displaying-initial-value-not-the-value-updated-from-code/26664111#26664111)。上面的链接中的答案指出了它的一个错误。它不是**(它的设计)。正确的做法是遵循PRG模式,而不是使用'ModelState.Clear()' –