Используя ASP.NET MVC 3, я хотел бы отобразить различные «шаблоны» (то есть частичные представления или как вы хотите их называть) для моих представлений, основываясь на типе модели представления (или свойстве модели представления) поставляется во время выполнения.
Я понимаю, что готовая функциональность ASP.NET MVC позволяет добавлять атрибут UIHint к свойству или полю в модели представления, предоставленной для представления, но, насколько я могу судить, это не соответствует мои потребности, так как я не буду знать требуемый шаблон до времени выполнения.
AFAICT ASP.NET также не поддерживает универсальные модели представления типа T, поэтому моя идея состоит в том, чтобы взять исходный код ASP.NET MVC3 и написать свой собственный метод DisplayFor, который принимает экземпляр Viewmodel (определенный его абстрактным базовым типом в представление), которое разрешает фактический тип во время выполнения и использует его для поиска имени шаблона по соглашению.
Это звучит целесообразно / целесообразно?
Представление будет выглядеть таким образом (обратите внимание на спецификацию базового типа, конкретный экземпляр будет предоставлен во время выполнения):
@model MyViewModelBase
@{ DisplayFor(Model); }
ViewModel:
public class MyMagicalViewModel : MyViewModelBase {}
Вызов этой точки зрения будет выглядеть так:
...
return View("MyView", MyMagicalViewModel);
...
... и это вернет HTML, соответствующий MyMagicalViewModelPartialView.cshtml