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



我有一个这样的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
}

最新更新