1


我有以下情况。
我正在控制器中设置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
有人知道如何防止额外的通知吗?

4

1 回答 1

0

我看不出这样做的简单方法。您可以尝试添加自己的操作过滤器并TempData["messages"]在某个时候清除该值,或者从您的父视图中执行此操作。不过,这两种解决方案都是解决方法,而且同样混乱。

顺便说一句 -Html.RenderAction应谨慎使用。除非您完全确定它的含义是什么,否则不要使用它。它在单个请求中处理多个操作。这很慢,迟早会让你遇到问题(比如你写的那个)。那里的大多数代码都假设在请求期间触发了一个操作。

如果你可以在没有它的情况下处理事情(在大多数情况下是可能的),那就去做吧。

于 2013-03-20T15:13:14.707 回答