首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HtmlHelper库能兼容MVC-3和MVC-4吗?

HtmlHelper库能兼容MVC-3和MVC-4吗?
EN

Stack Overflow用户
提问于 2013-06-19 10:13:06
回答 1查看 433关注 0票数 2

我正在尝试创建一个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.异常。

助手的签名如下:

代码语言:javascript
复制
public static IHtmlString InputTagFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression)

空引用异常就出现在这个方法中:

代码语言:javascript
复制
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应用程序中是相同的,控制器操作正在返回:

代码语言:javascript
复制
return View(new HomePage{TestStringField = "a string value"});

当助手从强类型(到HomePage) Razor视图调用时,如下所示:

代码语言:javascript
复制
@Html.InputTagFor(model => model.TestStringField)   
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-20 10:33:54

您不能这样做,因为如果您的库引用了ASP.NET MVC 3,那么库的使用者应该使用它,除非.他使用的是<bindingRedirect>,在这种情况下,他承担了在MVC的两个版本之间可能发生的急剧变化的责任。

老实说,算了吧。只需发布2种不同版本的库,或者如果您使用的是更高级的传递机制(而不是DLL的副本粘贴),则可以发布2种不同版本的NuGet版本的帮助程序。就像其他人一样。例如,您有Unity.MVC3Unity.MVC4

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17188624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档