Мой совет, перейдите к Варианту 1. Я использую это со всеми сценами Main View/Multiple Partial View. Он прост в обслуживании, так как каждый частичный имеет свой собственный ViewModel. Он держит все это красивый и чистый
Я использую ту же самую установку следующим образом:
public class MainViewModel {
public Partial1ViewModel Partial1 [ get; set; }
public Partial2ViewModel Partial2 [ get; set; }
public Partial3ViewModel Partial3 { get; set; }
public Partial4ViewModel Partial4 { get; set; }
public MainViewModel() {}
public MainViewModel() {
Partial1 = new Partial1ViewModel();
Partial2 = new Partial2ViewModel();
Partial3 = new Partial3ViewModel();
Partial4 = new Partial4ViewModel();
}
}
Каждый PartialViewXViewModel
это собственный ViewModel и в случае необходимости быть может быть повторно использована в другой точке зрения.
Ваши действия, что делает может выглядеть так:
public ActionResult Index {
var model = new MainViewModel();
return View(model);
}
Ваш взгляд
@model MainViewModel
<div>
{@Html.RenderPartial("PartialOne", Model.Partial1)}
</div>
<div>
{@Html.RenderPartial("PartialTwo", Model.Partial2)}
</div>
<div>
{@Html.RenderPartial("PartialThree", Model.Partial3)}
</div>
<div>
{@Html.RenderPartial("PartialFour", Model.Partial4)}
</div>
Определение пользовательского интерфейса для каждого PartialX
как:
@model Partial1ViewModel
//view html here
Теперь каждый Частичный вид HTML и каждая используемая ими модель может использоваться где угодно.
Большая часть сейчас, если у вас есть страница, которая нуждается только 2 из них вы просто создать новый ViewModel
, чтобы представить, что конкретный вид, как так:
public class OtherMainViewModel {
public Partial2ViewModel Partial2 [ get; set; }
public Partial4ViewModel Partial4 { get; set; }
public OtherMainViewModel() {}
public OtherMainViewModel() {
Partial2 = new Partial2ViewModel();
Partial4 = new Partial4ViewModel();
}
}
И использовать его в другой точке зрения, как так:
public ActionResult SomeOtherAction {
var model = new OtherMainViewModel();
return View(model);
}
и это вполне приемлемо, а также предпочтительная стратегия дизайна в MVC, чтобы иметь ViewModels, что конкретно представляет какой вид потребность и только то, что ему нужно.
Возможно, вы захотите использовать другой метод для заполнения ваших моделей. Большинство здесь рекомендуют использовать Automapper. В любом случае приведенное выше просто инициализирует PartialViewXModels в конструкторе MainViewModel. Это не обязательно будет вашим делом, если вы заполняете эти модели данными из вашей БД. Для этого вам нужна ваша собственная стратегия.Это будет работать здесь:
public ActionResult Index {
var model = new MainViewModel();
model.Partial1 = GetPartial1Data(); // this method would return Partial1ViewModel instance
model.Partial2 = GetPartial2Data(); // same as above for Partial2ViewModel
...
return View(model);
}
Это все просто, чтобы вы начали с дизайном, вы можете настроить его в ваших сердцах содержание :-)
Не могли бы вы объяснить, что вы имеете в виду под этим: «' проблемы заключается в том, что его жестко напечатано, и если мне нужно пройти разное сочетание моделей, он не будет соответствовать. – Yakimych
Это звучит как отличный кандидат на сегрегацию интерфейса - пусть объект модели реализует интерфейс для каждого частичного его включения. – arootbeer
@arootbeer Я согласен, это именно то, что я использую в своем текущем проекте. Так же как абстрактные и/или унаследованные классы для виртуальных машин –