Базовый контроллер - PullRequest
       3

Базовый контроллер

1 голос
/ 22 августа 2011

У меня есть ApplicationController, который наследует каждый контроллер в моем приложении.

public abstract class ApplicationController : Controller
public class HomeController : ApplicationController
public class AnnouncementController : ApplicationController

Мое приложение (IntraNet) также использует проверку подлинности Windows и извлекает имя пользователя для текущего домена. Когда имя пользователя не содержит идентификатора сайта, мне нужно, чтобы контроллер отображал представление, предпочтительно небольшое выпадающее окно со списком сайтов в раскрывающемся списке, чтобы пользователь мог выбрать.

Вопрос 1: Должна ли эта функция быть реализована в ApplicationController, чтобы все производные классы не нуждались в реализации этой проверки? Если да, как мне вызвать этот метод во время создания производного класса? В настоящее время ApplicationController содержит только конструкторы и никаких других методов.
Вопрос 2. Как сохранить этот выбранный идентификатор сайта в сеансе и других типах постоянного хранилища на время сеанса пользователя?

Спасибо.

1 Ответ

1 голос
/ 22 августа 2011

Если эта проверка должна выполняться при каждом вызове, я бы создал атрибут и украсил им базовый класс контроллера. Не забудьте также украсить ваш новый атрибут AttributeUsage, чтобы он вызывался на всех наследующих контроллерах.

[AttributeUsage (AttributeTargets.All, Inherited = true)]
public CheckStuffAttribute : ActionFilterAttribute
{
    // This is one method you can override to get access
    // to everything going on before any actions are executed.
    public override void OnActionExecuting (ActionExecutingContext filterContext)
    {
        // Do your checks, or whatever you need, here
    }
}

...

[CheckStuff]
public abstract class ApplicationController : Controller { ... }

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

[CheckStuff]
public abstract class ApplicationController : Controller
{
    public string DataToKeepAlive
    {
        get { return (string)Session["MyKey"]; }
        set { Session["MyKey"] = value; }
    }
}

Если сделать свойства общедоступными, к ним будут доступны ваши пользовательские атрибуты.

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