如何使用RenderAction防止在视图上呈现多个通知

时间:2013-03-20 14:24:46

标签: asp.net .net asp.net-mvc asp.net-mvc-4 orchardcms


我有以下情况 我正在控制器中设置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
有谁知道如何防止其他通知?

1 个答案:

答案 0 :(得分:0)

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

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

如果你可以处理没有它的东西(大多数情况下都可以),那就去做吧。