ASP.NET MVC 3使用类似DisplayFor(TBase o)的语法“多态地”呈现视图

时间:2011-06-23 19:31:37

标签: asp.net asp.net-mvc-3 views

使用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

1 个答案:

答案 0 :(得分:2)

你有没有看过Html.EditorFor