我正在尝试创建一个可在 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"});
当从强类型(to HomePage
)Razor 视图中调用助手时,如下所示:
@Html.InputTagFor(model => model.TestStringField)