0

我有一个像这样的 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。但是当它返回时intHtml.HiddenFor会触发此错误:

模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用。

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

让我烦恼的是,MyHelper接收的参数类型与HiddenFor. 那么为什么我不能重新提出这个论点呢?

我应该怎么办?

附言

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

4

1 回答 1

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
}
于 2012-05-10T12:02:07.683 回答