使用ASP.NET MVC 3我想基于视图模型的类型(或视图模型上的属性)将不同的“模板”(即部分视图或任何您想要调用它们)呈现给我的视图在运行时提供。
我理解开箱即用的ASP.NET MVC功能允许在提供给视图的viewmodel上的属性或字段中添加UIHint属性,但据我所知,这不符合我的需求,因为我不知道运行时所需的模板。
AFAICT ASP.NET也不支持类型为T的通用视图模型,所以我的想法是采用ASP.NET MVC3源代码并编写我自己的DisplayFor方法,该方法接受一个viewmodel实例(由它的抽象基类型指定)视图),它在运行时解析实际类型,并使用它来按惯例查找模板名称。
这听起来可行吗/值得吗?
因此视图看起来(注意基类型的规范,将在运行时提供具体实例):
@model MyViewModelBase
@{ DisplayFor(Model); }
视图模型:
public class MyMagicalViewModel : MyViewModelBase {}
因此调用此视图:
...
return View("MyView", MyMagicalViewModel);
...
...这会返回与MyMagicalViewModelPartialView.cshtml对应的html