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