Как создать строго типизированную главную страницу с использованием базового контроллера в ASP.NET MVC

ПослеNerdDinners Например, я заинтересован в создании строго типизированной мастер-страницы. Для этого я использую базовый контроллер, который извлекает данные для главной страницы. Все остальные контроллеры наследуют этот класс. Точно так же у меня естьViewModels для главной страницы и любых других просмотров. ВидViewModel классы наследуются от главной страницыViewModel.

Вопрос

Как дочерний контроллер должен гарантировать, что данные главной страницы передаются в представление без установки свойств егоViewModel что относится к самой главной странице?

Моя главная страница будет отображать количество кнопок, которые определены в файле XML, следовательно,Buttons класс, который я населяю.

MasterPage ViewModel Фрагмент кода

using System.Collections.Generic;

namespace Site1.Models
{
    public class MasterViewModel
    {
        public List<Button> Buttons{set; get;}
    }
}

ПосмотретьViewModel

namespace Site1.Models
{
    public class View1ViewModel : MasterViewModel
    {
        public SomeDataClass SomeData { get; set; }
    }
}
Базовый контроллер
using System.Collections.Generic;
using System.Web.Mvc;
using Site1.Models;

namespace Site1.Controllers
{
    public abstract class BaseController : Controller
    {
        protected MasterViewModel model = new MasterViewModel();

        public BaseController()
        {
            model.Buttons = new List<Button>();
            //populate the button classes (doesn't matter how)
            PopulateButtons(model.Buttons);
        }
    }
}

Контроллер вида:

using System.Web.Mvc;

namespace Site1.Controllers
{
    public class View1Controller : BaseController
    {
        public ActionResult Index()
        {
            Models.View1ViewModel viewModel = new Models.View1ViewModel();
            SomeDataClass viewData = new SomeDataClass()
            //populate data class (doesn't matter how)
            PopulateDataClass(viewData);
            viewModel.SomeData = viewData;
            //I WANT TO ELIMINATE THE FOLLOWING LINE!
            viewModel.Buttons = model.Buttons;
            return View("Index", viewModel);
        }
    }
}

Главная страница наследуетSystem.Web.Mvc.ViewMasterPage<Site1.Models.MasterViewModel>.

Представление наследуетSystem.Web.Mvc.ViewMasterPage<Site1.Models.View1ViewModel>.

Ответы на вопрос(2)

Ваш ответ на вопрос