【问题标题】:Can an HtmlHelper library be compatible with both MVC-3 and MVC-4?HtmlHelper 库能否与 MVC-3 和 MVC-4 兼容?
【发布时间】:2013-06-15 19:59:50
【问题描述】:

我正在尝试创建一个可在 MVC-3 和 MVC-4 项目中使用的 HtmlHelper 库。

通过将库中的框架引用设置为 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 应用调用的辅助方法:

...作为记录,模型 HomePage 是独立定义的,但在每个 MVC 应用程序内部都是相同的,只有一个字段 (TestStringField),因此控制器操作正在返回:

return View(new HomePage{TestStringField = "a string value"});

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

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

【问题讨论】:

  • 这很奇怪,您会遇到这样的不同错误。 htmlHelper.ViewData 为 null 还是 htmlHelper.ViewData.Model 为 null?不为 null 时的模型是什么(在 mvc3 应用中)?
  • @Kyle:htmlHelper.ViewData 不为空(但 .Model 为)。在 mvc3 应用程序中,模型的类型是适当的 ,即使在 MVC4 应用程序中,模型 type 也是正确的——它只是 null。请参阅我的更新中的屏幕截图。
  • 你确定在视图上模型不为空?
  • @Kyle:附加到 htlmHelper.ViewData 的模型 null,尽管我没有尝试直接从视图中检查模型。我不希望 tht 为空,但我会看看明天的工作并发表另一条评论。

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 html-helper


【解决方案1】:

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

老实说,忘记这一点。只需发送 2 个不同版本的库,或者如果您使用更高级的发送机制(而不是 DLL 的复制粘贴),您可以发送 2 个不同的 NuGet 版本的帮助程序。就像其他人一样。例如,您有 Unity.MVC3Unity.MVC4

【讨论】:

  • 这也是我认为我必须要做的。一个弹出的问题......你如何设置一个 html 助手项目,以便它为 mvc3 和 mvc4 构建 dll(可能很快就会有 mvc5)。我为此创建了一个separate question。非常感谢帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2015-08-04
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多