asp.net - ASP.NET MVC5 - 返回部分视图后不执行 RenderPartial()
问题描述
我有以下代码:
查看:
@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
)。在它们中的每一个中都呈现了部分视图。部分视图显示了模型项的表(模型是 an IEnumerable
),每个视图在枚举 (fe ) 之后都有一个过滤模型Html.RenderPartial("Formular/TableAllFormulare", model => model.Status == FormularStatus.Archiviert
。
第一次加载索引页面时,一切正常。我可以在RenderPartial()
-lines 处设置一个断点,它会停在那里。两个局部视图都在过滤模型后正确显示其表格。
在我的页面上,我有一个按钮,按下它会启动 Javascript btnArchivieren
,它将一个 ajax 发送到控制器。该操作将返回Partial View()
带有更新模型的 a。
但是现在我的刹车点RenderPartial()
不会再次被触发。好吧,div 已更新,是的,但没有过滤部分视图的模型 ( Model.Where(model => model.Status == FormularStatus.Archiviert
)。两个部分视图都显示了没有通过枚举过滤的表格。就像我说的,我的刹车点甚至没有被触发。
我究竟做错了什么?为什么RenderPartial()
从带有更新模型的控制器返回部分视图后不执行 -lines?
解决方案
当你使用:
@{ 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());
我希望你明白为什么它一开始不会像你预期的那样工作,所以如果你不明白,请告诉我。我会尝试更好地解释它。
推荐阅读
- c - 尝试使用 malloc 分配内存时出错(读取冲突),它有时适用于前几个字符串,但最终会爆炸
- asp.net-core - 从 OnInitializedAsync Blazor 调用 javascript 时出现 JavaScript 互操作错误
- python - 哪个游戏引擎用于后台视频
- spring-boot - 由于检测到重复 ID,无法启动路由 [A]:[B]
- linux - 使用 crontab 拒绝权限
- php - 使用未知输入名称更新表
- azure - 在发现和评估期间添加服务器时在 azure migrate 设备中抛出访问被拒绝错误
- php - 如何使用return代替echo来输出html?
- cron - 如何在 crontab 上使用 env .bashrc 变量?
- angular - Ionic Angular HttpClient 注入不起作用