powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC: Инициализация свойств в Layout
7 сообщений из 7, страница 1 из 1
MVC: Инициализация свойств в Layout
    #39097484
NSK-Николай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо реализовать принцип описанные в:
1. http://habrahabr.ru/post/116298
2. http://blog.bitdiff.com/2012/05/sharing-common-view-model-data-in.html

Месяц жизни, а результат - 0

Можно ссылки на примеры?
...
Рейтинг: 0 / 0
MVC: Инициализация свойств в Layout
    #39097517
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NSK-Николай,

Можно описать проблемы с которыми столкнулся?
...
Рейтинг: 0 / 0
MVC: Инициализация свойств в Layout
    #39097533
NSK-Николай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,
Со строкой "GlobalFilters.Filters.Add(container.Resolve<LayoutModelAttribute>(), 1);" из второй ссылки.
...
Рейтинг: 0 / 0
MVC: Инициализация свойств в Layout
    #39097549
NSK-Николай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
    public class LayoutModelAttribute : ActionFilterAttribute
    {
        private readonly IViewModelFactory _viewModelFactory;

        public LayoutModelAttribute(IViewModelFactory viewModelFactory)
        {
            _viewModelFactory = viewModelFactory;
        }

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var controller = filterContext.Controller as BaseController;
            if (controller != null)
            {
                (controller).Context = _viewModelFactory.Create<SharedContext>();
            }

            base.OnActionExecuting(filterContext);
        }

        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            var viewModel = filterContext.Controller.ViewData.Model;
            var controller = filterContext.Controller as BaseController;

            var model = viewModel as LayoutViewModel;
            
            if (model != null)
            {
                (model).Context = controller != null && controller.Context != null ? controller.Context : _viewModelFactory.Create<SharedContext>();
            }

            base.OnResultExecuting(filterContext);
        }
    }



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
    public class ViewModelFactory : IViewModelFactory
    {
        private readonly IUserProvider _userService;
        private readonly IMessageSenderRepository _userMessageService;

        public ViewModelFactory(IUserProvider userService, IMessageSenderRepository userMessageService)
        {
            _userService = userService;
            _userMessageService = userMessageService;
        }

        public T Create<T>() where T : SharedContext, new()
        {
            var model = new T();
            Set(model);

            return model;
        }

        public void Set<T>(T model) where T : SharedContext, new()
        {
            User user = _userService.User;



            model.CurrentUser = user;
            model.UnreadMessageCount = _userMessageService.UnreadMessageCount(user.Id);
        }
    }



Код: c#
1.
2.
3.
4.
5.
    public interface IViewModelFactory
    {
        T Create<T>() where T : SharedContext, new();
        void Set<T>(T model) where T : SharedContext, new();
    }
...
Рейтинг: 0 / 0
MVC: Инициализация свойств в Layout
    #39097905
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NSK-НиколайhVostt,
Со строкой "GlobalFilters.Filters.Add(container.Resolve<LayoutModelAttribute>(), 1);" из второй ссылки.

Если честно, не вижу ни одного плюса в применении этого подхода. Используй простые вью-модели, без всяких фабрик, и тем более без учёта Layout.

Тут типа решили учесть, что лейауту тоже нужны данные, и запихали их во вью модель. Отвратительно. Не делай так никогда. Вью-модель концентрируется только на том, что ты выводишь во вью, и плевать на лейауты с высоченной колокольни. Иначе замена лейаута станет адским кошмаром для сотен вью. Даже не заморачивайся, выкинь эти эээ... «тьюториалы» на помойку. Там им место.
...
Рейтинг: 0 / 0
MVC: Инициализация свойств в Layout
    #39098573
NSK-Николай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,

спасибо, но как таскать по сайту информацию, например о количестве непрочитанных писем (отображается в меню на HOME\Index)
...
Рейтинг: 0 / 0
MVC: Инициализация свойств в Layout
    #39098583
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NSK-НиколайhVostt,

спасибо, но как таскать по сайту информацию, например о количестве непрочитанных писем (отображается в меню на HOME\Index)
Session, например.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC: Инициализация свойств в Layout
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]