首页 文章

ASP.NET MVC 3 使用 DisplayFor(TBase o)-like 语法“多态地”渲染视图

提问于
浏览
1

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

相关问题