2013-03-20 2 views
1


У меня есть следующий сценарий.
Я настраиваю уведомление в контроллере INotifier, после чего я перенаправляюсь к другому действию. На вид, где я перенаправляю, есть некоторые помощники Html.RenderAction. Каждый раз, когда действие оказывают пожары NotifyFilter.OnResultExecuting(ResultExecutingContext filterContext) и каждый метод вызвать набор сообщений в tempData[TempDataMessages] (где уведомительное сообщение сохраняется на NotifyFilter.OnActionExecuted(ActionExecutedContext filterContext) добавлена ​​новая запись сообщениеКак предотвратить многократное рендеринг уведомлений на RenderAction

Мой контроллер:.

[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

Я не вижу простого способа сделать это. Вы можете попробовать добавить свой собственный фильтр действий и очистить значение TempData["messages"] в какой-то момент или сделать это изнутри родительского представления. Оба решения являются обходными решениями, хотя и одинаково беспорядочными.

Btw - Html.RenderAction следует использовать с осторожностью. Не используйте, если вы не уверены, каковы последствия. Он обрабатывает несколько действий в одном запросе. Это очень медленно, и рано или поздно вы столкнетесь с проблемами (например, тем, о которых вы писали). Большая часть кода предполагает, что во время запроса есть одно действие.

Если вы можете обращаться с вещами без него (что в большинстве случаев возможно), сделайте это.

Смежные вопросы