2010-11-25 7 views
3

ASP.NET-MVC2プロジェクトでは、Views \ Shared \ EditorTemplatesフォルダとDisplayTemplatesフォルダにあるユーザーコントロールをいくつか構築しました。Editorクラスライブラリのテンプレート

私はこのテンプレートをクラスライブラリに入れて再利用できるようにしようとしていますが、どうすればいいですか?

これは役立つかもしれませんが、もう少し詳細がわかりません。いくつかのテンプレートは、(文字列、Int32などの)型の後に名前が付けられ、一部はRemoteComboのように指定され、UIHintのテンプレートヒントで指定されます。

+0

[VirtualPathProviderを使用してDLLからASP.NET MVCビューをロードする]の複製が可能です(http://stackoverflow.com/questions/236972/using-virtualpathprovider-to-load-asp-net-mvc-views-from- dlls) – jfar

+0

Brad Wilson氏は次のように述べています。「XCOPYが最良の選択肢です。MvcTurbineのような再配布のためのビューを埋め込むようなサードパーティのライブラリがあります。だから、もしあなたが組み込みのコントロールをサードパーティーのオプションが欲しいなら、私はxcopy toughに落ち着くだろう。 – hazimdikenli

答えて

1

残念ながら、ライブラリを作成してそこにascxファイルを置くことはできません。適切なHTMLをレンダリングするテンプレートの「コード専用」バージョンを作成する必要があります。

MicrosoftはSystem.Web.Mvc.dll

内のデフォルトのテンプレートを提供するために、テンプレートの詳細については、thisブログで見つけることができるだけのことをしなければならなかった - それはでテンプレートに関する記事の素敵なシリーズですMVC。すべてのデフォルトのテンプレートはで見ることができます。これは、(System.Web.Mvc.dllからの)デフォルトの小数のためのエディタのテンプレートである

internal static string DecimalTemplate(HtmlHelper html) 
{ 
    if (html.ViewContext.ViewData.TemplateInfo.FormattedModelValue == html.ViewContext.ViewData.ModelMetadata.Model) 
    { 
     html.ViewContext.ViewData.TemplateInfo.FormattedModelValue = string.Format(CultureInfo.CurrentCulture, "{0:0.00}", new object[] { html.ViewContext.ViewData.ModelMetadata.Model }); 
    } 
    return StringTemplate(html); 
} 

を(「内蔵ディスプレイテンプレート」のセクションを見てみましょう)リフレクターSystem.Web.Mvc.Html名前空間。

+0

"コード専用"テンプレートとはどういう意味ですか?あなたはHtmlヘルパー、あるいはEditorFor <>()で正しいtemplateHintで呼び出される何かを意味しますか? – hazimdikenli

+0

@hazimdikenli - デフォルトのDecimalTemplateコードを追加しました –

+0

これは間違っています。アセンブリリソースからビューをロードできます。 – jfar