Как создать строго типизированную главную страницу с использованием базового контроллера в 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>
.