我正在尝试创建一个HtmlHelper库,它将在MVC-3和MVC-4项目中运行。
通过将库中的框架引用设置为MVC-2,我已经能够获得一个在MVC-2和MVC-3之间兼容的库,但是MVC-2并不重要。
如果我将库中的框架引用设置为MVC-3,当MVC-4项目使用其中一个助手时,助手库中的方法就会出现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)空引用异常就出现在这个方法中:
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应用程序调用的Helper方法:

...and作为记录,模型HomePage是独立定义的,但在每个只有一个字段(TestStringField)的MVC应用程序中是相同的,控制器操作正在返回:
return View(new HomePage{TestStringField = "a string value"});当助手从强类型(到HomePage) Razor视图调用时,如下所示:
@Html.InputTagFor(model => model.TestStringField) 发布于 2013-06-20 10:33:54
您不能这样做,因为如果您的库引用了ASP.NET MVC 3,那么库的使用者应该使用它,除非.他使用的是<bindingRedirect>,在这种情况下,他承担了在MVC的两个版本之间可能发生的急剧变化的责任。
老实说,算了吧。只需发布2种不同版本的库,或者如果您使用的是更高级的传递机制(而不是DLL的副本粘贴),则可以发布2种不同版本的NuGet版本的帮助程序。就像其他人一样。例如,您有Unity.MVC3和Unity.MVC4。
https://stackoverflow.com/questions/17188624
复制相似问题