我有一个这样的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
完全相同。那么为什么我不能重新传递这个论点呢?
我该怎么办?
附言
我没有将任何可为空的表达式传递给 MyHelper(我看到了其他一些问题,其中这是答案)
问题出在不可空类型的强制转换表达式上。
尝试使用强类型帮助程序而不是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
}