Как реализовать логику на уровне "masterpage" - PullRequest
6 голосов
/ 08 марта 2011

Я все еще новичок в MVC, так что терпите меня: -)

У меня есть сайт сообщества, над которым я работаю, и я хотел бы показать, сколько пользователей в сети на всех моих страницах после входа в систему.

У меня есть общий вид, который используется как макет для всех страниц после входа в систему (UserLayout.cshtml)

Могу ли я как-то добавить логику для отображения онлайн-счета в моей общей раскладке?

Если бы это были веб-формы, у меня была бы какая-то часть кода для моей главной страницы, но здесь это явно не вариант.

Информация о пользователях в сети извлекается из кэша. Он не доступен как свойство ни в одной из моих моделей просмотра.

Ответы [ 4 ]

8 голосов
/ 08 марта 2011

Вы можете написать действие, которое отображает информацию (используя очень маленькое представление)

Затем можно вызвать Html.Action, чтобы отобразить ее со страницы макета.

1 голос
/ 08 марта 2011

Вы можете создать класс 'UserLayoutModel' и получить от него все другие модели представлений.Вы также можете использовать RenderAction, чтобы отображать часть пользовательского интерфейса отдельно (убедитесь, что вы пометили это действие атрибутом ChildActionOnly).

0 голосов
/ 09 марта 2011

Вы можете создать глобальный фильтр действий.

Обычно вы добавляете фильтр действий в качестве атрибута к методу или классу ([HttpPost]).Используя глобальный фильтр действий, вы можете добавлять код к каждому действию без необходимости наследования от определенного класса.Это как если бы вы добавили атрибут к каждому методу действия.

Эта статья многое объясняет.

0 голосов
/ 08 марта 2011

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

protected override void OnActionExecuting(ActionExecutingContext filterContext) {
    base.OnActionExecuting(filterContext);
}
...