Возврат MVC ActionResult до вызова конкретного метода контроллера - PullRequest
1 голос
/ 04 марта 2009

У меня есть базовый класс контроллеров, от которого унаследованы другие мои контроллеры

public abstract class BaseController : Controller
{
    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        base.Initialize(requestContext);
        ...
    }
}

Во время инициализации я делаю некоторые настройки, и есть несколько случаев, когда я хотел бы замкнуть выполнение, переходя непосредственно к возвращению ActionResult, полностью пропуская выполнение фактического метода Action. Что-то в этом роде

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    base.Initialize(requestContext);
    if(specialCase)
    {
        ViewData[...] = specialCaseInformation;
        return View("~/Shared/SpecialCase.aspx");
    }   
}

Намерением было бы пропустить любой вызываемый метод ActionResult и заменить его моей глобальной страницей особого случая. Но я не думаю, что Initialize был предназначен для этого.

То, что я думаю Мне нужно сделать, это создать отдельный класс ActionFilterAttribute, переопределить метод OnActionExecuting, а если возникнет specialCase, создать объект ViewResult и назначить его свойству filterContext.Result.

Я иду в правильном направлении с этим, или я должен делать это по-другому?

1 Ответ

0 голосов
/ 04 марта 2009

Да, ActionFilterAttribute - это абсолютно правильный путь. Посмотрите на HandleErrorAttribute.cs для примера.

Инициализация, как вы говорите, неправильный путь.

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