【发布时间】: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