Asp.net mvc HtmlHelper库能否同时与MVC-3和MVC-4兼容?

Asp.net mvc HtmlHelper库能否同时与MVC-3和MVC-4兼容?,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,html-helper,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,Html Helper,我正在尝试创建一个HtmlHelper库,它将在MVC-3和MVC-4项目中工作 通过将库中的框架引用设置为MVC-2,我已经能够获得一个在MVC-2和MVC-3之间兼容的库,但是MVC-2不是问题所在 如果我将库中的框架引用设置为MVC-3,那么当MVC-4项目使用其中一个帮助程序时,帮助程序库中的方法会认为对象引用未设置为对象的实例。异常 助手具有如下签名: public static IHtmlString InputTagFor<TModel, TValue>(this Ht

我正在尝试创建一个HtmlHelper库,它将在MVC-3和MVC-4项目中工作

通过将库中的框架引用设置为MVC-2,我已经能够获得一个在MVC-2和MVC-3之间兼容的库,但是MVC-2不是问题所在

如果我将库中的框架引用设置为MVC-3,那么当MVC-4项目使用其中一个帮助程序时,帮助程序库中的方法会认为
对象引用未设置为对象的实例。
异常

助手具有如下签名:

public static IHtmlString InputTagFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression)
因为htmlHelper.ViewData.Model是
null

如果我将框架引用切换到MVC-4(并将system.web.webpages切换到v2),那么所有这些都可以在MVC-4应用程序中工作;但是,当然,它在MVC-3应用程序中不起作用

所以,我的问题是:是否有可能创建一个在这些框架版本之间兼容的HtmlHelper库,以及如何创建

在断点处更新助手方法的屏幕截图,观察窗口显示htmlHelper的值

从MVC-3应用程序调用的助手方法:

从MVC-4应用程序调用的助手方法:

…作为记录,model
HomePage
是独立定义的,但在每个MVC应用程序中相同,只有一个字段(
TestStringField
),控制器操作返回:

return View(new HomePage{TestStringField = "a string value"});
在从强类型(到
主页
)Razor视图调用帮助程序时,如下所示:

@Html.InputTagFor(model => model.TestStringField)   

您不能这样做,因为如果您的库引用ASP.NET MVC 3,则库的使用者应该使用它,除非。。。他使用了
,在这种情况下,他承担了两个版本的MVC之间可能发生的破坏性更改的责任


老实说,忘了那件事吧。只需提供2个不同版本的库,或者如果您使用的是更高级的传送机制(而不是DLL的复制粘贴),则可以提供2个不同的NuGet版本的帮助程序。就像其他人一样。例如,你有
Unity.MVC3
Unity.MVC4

这两种错误,你会得到不同的错误,这很奇怪。htmlHelper.ViewData是空的还是htmlHelper.ViewData.Model是空的?当模型不为空时(在mvc3应用程序中)?@Kyle:htmlHelper.ViewData不为空(但是.model为空)。在mvc3应用程序中,模型的类型是正确的,即使在MVC4应用程序中,模型类型也是正确的——它只是空的。请参阅我的更新中的屏幕截图。您确定视图中的模型不是空的吗?@Kyle:附加到htlmHelper.ViewData的模型是空的,尽管我没有尝试直接从视图中检查模型。我不希望tht为空,但我明天会看一看工作并发表另一条评论。这也是我想我也必须做的。一个突然出现的问题。。。如何设置一个html助手项目,以便它为mvc3和mvc4(可能很快还会为mvc5)构建DLL。我为此创建了一个。非常感谢您的帮助
@Html.InputTagFor(model => model.TestStringField)