无法从我的HtmlHelper中调用Html.HiddenFor。为什么?

时间:2012-05-10 11:59:33

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

我有一个像这样的HtmlHelper :(为了清晰起见而简化)

public static MvcHtmlString MyHelper<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, object>> expressionId)
{
    // do something here

    tagBuilder.Append(htmlHelper.HiddenFor(expressionId));

    // do something here
}

expressionId返回string时,代码工作正常。但是当它返回int时,Html.HiddenFor会触发此错误:

  

模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。

我不知道究竟是什么问题,但我怀疑它与此有关: 当我在调试模式下检查expressionId时,我可以看到表达式为:m => Convert(m.Id)而不是预期的m => m.Id

我的错误是,MyHelper正在接收与HiddenFor完全相同的参数类型。那么为什么我不能重新讨论这个论点呢?

我该怎么办?

PS

我没有将任何可以为空的表达式传递给MyHelper(我已经看到了一些其他问题,这就是答案)

1 个答案:

答案 0 :(得分:1)

问题在于非可空类型的强制转换表达式。

尝试使用强类型帮助程序而不是object

public static MvcHtmlString MyHelper<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper, 
    Expression<Func<TModel, TProperty>> expressionId
)
{
    // do something here

    tagBuilder.Append(htmlHelper.HiddenFor(expressionId));

    // do something here
}