我有以下情况
我正在控制器中设置INotifier
通知,之后我将重定向到其他操作。在我重定向的视图中,我有一些Html.RenderAction
助手。
每次呈现操作时都会触发NotifyFilter.OnResultExecuting(ResultExecutingContext filterContext)
,并且每个方法都会调用设置为tempData[TempDataMessages]
的消息(其中NotifyFilter.OnActionExecuted(ActionExecutedContext filterContext)
保存通知消息)会添加新的消息条目。
我的控制器:
[HttpPost, ActionName("SomeAction")]
public ActionResult SomeActionPost()
{
_notifier.Information(T("Important information"));
return RedirectToAction("OtherAction", "MyController");
}
public ActionResult OtherAction()
{
return View();
}
观点:
<div>
@{ Html.RenderAction("ActionOne", "MyController");}
@{ Html.RenderAction("ActionTwo", "MyController");}
</div>
因此,通知会增加三倍(一次由ActionResult OtherAction
,一次由ActionResult ActionOne
,一次由ActionResult ActionTwo
。
有谁知道如何防止其他通知?
答案 0 :(得分:0)
我看不出这样做的简单方法。您可以尝试添加自己的操作过滤器并在某个时刻清除TempData["messages"]
值,或者在父视图中执行此操作。然而,这两种解决方案都是解决方法,同样也很混乱。
顺便说一下 - Html.RenderAction
应该谨慎使用。 不要使用它,除非您完全确定其含义。它使得在单个请求中处理多个动作。这是非常缓慢的,迟早会让你遇到问题(比如你写的那个)。大多数代码都假设在请求期间触发了一个动作。
如果你可以处理没有它的东西(大多数情况下都可以),那就去做吧。