ASP.NET MVC Обмен логикой между действиями - PullRequest
0 голосов
/ 23 февраля 2010

Я создаю сайт, на котором мне нужно иметь возможность уведомлять пользователя на каждой странице. Функция будет очень похожа на то, что использует StackOverflow, желтая (оранжевая?) Граница сверху. Я не хочу воспроизводить эту логику во всех моих действиях. DRY.

Я думаю об использовании фильтра действий, но, поскольку мне нужно запросить уровень данных, это не лучший способ его решить.

Так, например, каков наилучший способ реализовать будущее, например, «У вас есть вопрос с окончанием награды за X дней» на каждой странице?

Ответы [ 3 ]

1 голос
/ 24 февраля 2010

Когда у меня есть логика, которая должна выполнять каждое действие, которое должно инициализировать данные представления, я делаю это в моем методе OnResultExecuting (вызываемом после выполнения действия, до отображения представления) моего базового контроллера (от которого наследуются все мои контроллеры ), который устанавливает данные в моей модели данных базового представления (от которой наследуются все модели данных моего представления):

public class BaseViewData
{
  public string UserMessage { get; set; }
}

public class BaseController : Controller
{
  protected override void OnResultExecuting(ResultExecutingContext filterContext)
  {
     ViewResult viewResult = filterContext.ActionResult as ViewResult;
     //Only continue if action returned an ActionResult of type ViewResult,
     //and that ViewResults ViewData is of type BaseViewData
     if(viewResult != null && viewResult.ViewData is BaseViewData)
     {
        ((BaseViewData)viewResult.ViewData).UserMessage = userService.GetUserMessage();
     }
  }
}
1 голос
/ 23 февраля 2010

В ASP.NET MVC 2 есть Html.RenderAction . Для ASP.NET MVC 1.0, если я правильно помню, в MvcContrib .

те же функции.
0 голосов
/ 23 февраля 2010

Я бы использовал TempData для хранения сообщения, добавил бы помощника для отображения сообщения (если оно есть), а затем использовал бы его на своей главной странице. Это в основном то, как это делает rails, и я всегда чувствовал, что отсутствие системы уведомлений (например, flash) было странным пробелом в ASP.net MVC, просто потому, что это так легко сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...