Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Can';不要从我的HtmlHelper中调用Html.HiddenFor。为什么?_.net_Asp.net Mvc 3_Html Helper - Fatal编程技术网

.net Can';不要从我的HtmlHelper中调用Html.HiddenFor。为什么?

.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触发此错误: 模板只能用于字段访问、属性访

我有一个这样的HtmlHelper:(为清晰起见简化)

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
}