【问题标题】:ASP.NET MVC5 - RenderPartial() doesn't executed after returning Partial ViewASP.NET MVC5 - 返回部分视图后不执行 RenderPartial()
【发布时间】:2019-05-17 21:48:46
【问题描述】:

我有以下代码:

查看

@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 =&gt; model.Status == FormularStatus.Archiviert)。

第一次加载索引页面时,一切正常。我可以在RenderPartial()-lines 处设置一个断点,它会停在那里。两个局部视图都在过滤模型后正确显示其表格。

在我的页面上,我有一个按钮,按下它会启动 Javascript btnArchivieren,它会向控制器发送一个 ajax。该操作将返回带有更新模型的Partial View()

但现在我在RenderPartial() 的刹车点不会再次被触发。好吧,div 已更新,是的,但没有过滤部分视图的模型 (Model.Where(model =&gt; model.Status == FormularStatus.Archiviert)。两个部分视图都显示了没有通过枚举过滤的表格。就像我说的那样,我的刹车点甚至没有被触发。

我做错了什么? 为什么RenderPartial()-lines 在从具有更新模型的控制器返回部分视图后不执行?

【问题讨论】:

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


    【解决方案1】:

    当你使用时:

    @{ 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());
    

    我希望你能理解为什么它一开始不能像你预期的那样工作,所以如果你不明白,请告诉我。我会尽量解释清楚。

    【讨论】:

    • 在 ajax 中使用 $('#divArchivierteFormulare').html(data);} 实际上我还调用了 Html.RenderPartial 行。我已经实现了几个完全具有这种行为的部分视图,因此我很困惑我的 pv 没有加载的原因。
    • 哦,我明白了。您的代码中没有“错误”,您只是希望“div”中的“Where”在执行 ajax 时工作。这不是那样工作的。正如我试图向您解释的那样,当您这样做时:$('#divArchivierteFormulare').html(data); 您将渲染页面中的 DOM 内容替换为“数据”对象,这是您的“Formular/TableAllFormulare”部分的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    相关资源
    最近更新 更多