.net Can';不要从我的HtmlHelper中调用Html.HiddenFor。为什么?
我有一个这样的HtmlHelper:(为清晰起见简化).net Can';不要从我的HtmlHelper中调用Html.HiddenFor。为什么?,.net,asp.net-mvc-3,html-helper,.net,Asp.net Mvc 3,Html Helper,我有一个这样的HtmlHelper:(为清晰起见简化) public static MvcHtmlString MyHelper(此HtmlHelper,表达式expressionId) { //在这里做点什么 tagBuilder.Append(htmlHelper.HiddenFor(expressionId)); //在这里做点什么 } 当expressionId返回string时,代码工作正常。但是当它返回int时,Html.HiddenFor触发此错误: 模板只能用于字段访问、属性访
public static MvcHtmlString MyHelper(此HtmlHelper,表达式expressionId)
{
//在这里做点什么
tagBuilder.Append(htmlHelper.HiddenFor(expressionId));
//在这里做点什么
}
当expressionId
返回string
时,代码工作正常。但是当它返回int
时,Html.HiddenFor
触发此错误:
模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式
我不知道到底是什么问题,但我怀疑这与此有关:
在调试模式下检查expressionId
时,我可以看到表达式是:m=>Convert(m.Id)
而不是预期的m=>m.Id
让我不舒服的是,MyHelper
接收到的参数类型与HiddenFor
完全相同。那么为什么我不能重新通过这个论点呢
我该怎么办
PS
我没有将任何可为null的表达式传递给MyHelper(我已经看到了一些其他问题的答案)问题在于不可为null类型的强制转换表达式 尝试使用强类型帮助程序而不是
对象
:
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
}
publicstaticmvchtmlstring-MyHelper(
这个HtmlHelper HtmlHelper,
表达式表达式ID
)
{
//在这里做点什么
tagBuilder.Append(htmlHelper.HiddenFor(expressionId));
//在这里做点什么
}
但这正是我所做的!哦,不,你的论点看起来像这个表达式
,这不是我在回答中所说的。在我的回答中,我为您的助手添加了第二个通用参数。仔细看看。
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
}