我有以下代码:
查看:
@model IEnumerable<FormBuilder.Model.Formular>
<div id="divAktiveFormulare">
@{ Html.RenderPartial("Formular/TableAllFormulare", Model.Where(model => model.Status == FormularStatus.Aktiv).ToList()); }
</div>
<div id="divArchivierteFormulare">
@{ Html.RenderPartial("Formular/TableAllFormulare", Model.Where(model => model.Status == FormularStatus.Archiviert).ToList()); }
</div>
function btnArchivieren(e) {
$.ajax({
url: 'Url.Action("Archive", "Formular")',
data: { id: e.target.name },
success: function (data) {
$('#divArchivierteFormulare').html(data);
}
});
}
控制器:
public ActionResult Index()
{
List<Formular> aktiveformulare = _formularManager.GetAllFormulare();
return View(aktiveformulare);
}
public ActionResult Archive(int id)
{
Formular formular = _formularManager.GetFormularByID(id);
if (formular != null)
{
formular.Status = FormularStatus.Archiviert;
_formularManager.UpdateFormular(formular);
}
return PartialView("Formular/TableAllFormulare", _formularManager.GetAllFormulare());
}
我有两个div(divAktiveFormulare
和divArchivierteFormulare
)。在每个视图中都呈现了局部视图。局部视图显示了模型项的表(模型是IEnumerable
),每个视图在枚举(例如Html.RenderPartial("Formular/TableAllFormulare", model => model.Status == FormularStatus.Archiviert
)后都有一个经过过滤的模型。
首次加载索引页时,一切运行正常。我可以在RenderPartial()
行设置一个断点,它将在此处停止。在过滤模型之后,两个局部视图都能正确显示其表。
在我的页面上,我有一个按钮,按下该按钮将启动Javascript btnArchivieren
,该JavaScript将ajax发送到控制器。该操作将返回带有更新模型的Partial View()
。
但是现在我在RenderPartial()
的刹车点将不会再被解雇。好吧,div是更新的,但是没有为部分视图(Model.Where(model => model.Status == FormularStatus.Archiviert
)过滤模型。这两个局部视图都显示了该表,但没有通过枚举进行过滤。就像我说的那样,我的刹车点甚至没有被开除。
我在做什么错?
从带有更新模型的控制器返回部分视图后,为什么不执行RenderPartial()
行?
答案 0 :(得分:0)
使用时:
@{ Html.RenderPartial("Formular/TableAllFormulare", Model.Where(model => model.Status == FormularStatus.Aktiv).ToList()); }
您告诉您的应用程序它必须使用提供的数据调用部分视图“ Formular / TableAllFormulare”。
仅在呈现所有页面时才执行此操作,而不是通过ajax调用它。
部分视图中的代码将由ajax调用执行。
无论如何,我建议在此行将断点放置在控制器中:
Formular formular = _formularManager.GetFormularByID(id);
因为将执行该行,而且可能隐藏了错误。
编辑:
您只需要这样做:
return PartialView("Formular/TableAllFormulare", _formularManager.GetAllFormulare().Where(model => model.Status == FormularStatus.Archiviert).ToList());
我希望您能理解为什么它一开始无法按您预期的那样工作,所以请告诉我是否这样做。我会尽力解释。