MVC-3 プロジェクトと MVC-4 プロジェクトの両方で動作する HtmlHelper ライブラリを作成しようとしています。
ライブラリ内のフレームワーク参照を MVC-2 に設定することで、MVC-2 と MVC-3 の間で互換性のあるライブラリを取得できましたが、MVC-2 は問題ではありません。
ライブラリのフレームワーク参照を MVC-3 に設定すると、MVC-4 プロジェクトがヘルパーの 1 つを使用すると、ヘルパー ライブラリのメソッドがObject reference not set to an instance of an object.
例外をスローします。
ヘルパーには次のような署名があります。
public static IHtmlString InputTagFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression)
そして、メソッドのこの時点で null 参照例外が発生します。
var value = expression.Compile()(htmlHelper.ViewData.Model).ToString();
htmlHelper.ViewData.Model が であるためですnull
。
フレームワーク参照を MVC-4 (および system.web.webpages を v2) に切り替えると、すべて MVC-4 アプリで動作します。もちろん、MVC-3 アプリでは機能しません。
したがって、私の質問は次のとおりです。これらのフレームワーク バージョン間で互換性のある HtmlHelper ライブラリを作成することは可能ですか?また、その方法は?
ウォッチ ウィンドウに htmlHelper の値が表示されている、ブレークポイントでのヘルパー メソッドのスクリーンショットを更新します...
MVC-3 アプリから呼び出されるヘルパー メソッド:
MVC-4 アプリから呼び出されるヘルパー メソッド:
...記録のために、モデルHomePage
は個別に定義されますが、各 MVC アプリ内で同じように 1 つのフィールド ( TestStringField
) のみで定義され、コントローラー アクションは次のように返されます。
return View(new HomePage{TestStringField = "a string value"});
ヘルパーが強く型付けされた ( to HomePage
) Razor ビューから次のように呼び出されている間:
@Html.InputTagFor(model => model.TestStringField)