ASP.NET MVC5-返回Partial View后未执行RenderPartial()

时间:2018-12-17 13:57:07

标签: asp.net asp.net-mvc asp.net-ajax partial-views

我有以下代码:

查看

@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(divAktiveFormularedivArchivierteFormulare)。在每个视图中都呈现了局部视图。局部视图显示了模型项的表(模型是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()行?

1 个答案:

答案 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());

我希望您能理解为什么它一开始无法按您预期的那样工作,所以请告诉我是否这样做。我会尽力解释。