0

我创建了一个相当通用的视图引擎,我最初创建的不是针对 ASP.Net MVC。不过现在,我认为将它放在至少可以被 MVC 项目轻松使用的地方是个好主意。我想知道我的项目是否可以很好地映射到 ASP.Net MVC 样式。

我遇到的问题是我的视图引擎在编译时通过 T4 模板生成所有内容。这意味着大部分内容都是静态类型的。然而,大多数 MVC 的类型似乎有点松散。

因此,对于某些视图,您可能会生成以下代码:

class MyView{
  public string Foo{get;set;}
  public int Bar{get;set;}
  public string Render(){
    return "This is my view: "+Foo+(string)Bar;
  }
}

而且由于它的工作方式,即使有一个 views/FooView.html 文件,它也可能被处理成一个名为MyView.

那么分配给MyView和ViewDatasay的最佳方式究竟是怎样的呢?我应该只施加限制,即您只能在视图中使用单个字段(基本上是 a )还是?FooBarViewData

我看到的另一个主要问题是 MVC 几乎完全基于文件。当您说RenderView("MyView",data);它将在 /views/ 中查找名为 MyView.aspx 的文件或其他文件时(您当然可以更改它的外观和文件扩展名)。问题是它MyView可能是从一个名为FooView.html. 我应该基本上只为每个可用的视图生成一个巨大的列表吗?从类名到文件系统名的映射?或者,还有更好的方法?

注意:因为我从 T4 模板生成所有视图(并且可能生成 MVC 视图引擎),这意味着我可以编写大量列表和其他极其乏味或糟糕的代码。但在这种情况下,我觉得有比一个巨大的列表更好的方法,而且只保留一个列表会有潜在的问题。

4

1 回答 1

1

您可以扩展我的基于 T4 的视图引擎以从您的模型创建类文件,在内存中编译并缓存它,并通过反射将您的视图模型传递给编译的程序集。

http://mvct4viewengine.codeplex.com/

于 2011-08-10T03:10:48.857 回答