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

ViewDataでは、言うことFooBarMyViewを割り当てる最良の方法はどのように正確ですか? ビューで単一のフィールドしか使用できないという制限を課す必要がありますか(基本的にはViewData)または?

もう 1 つの大きな問題は、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 に答える