我有一个像这样的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(我已经看到了一些其他问题,这就是答案)
答案 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
}