C# MVC4模板只能与字段访问一起使用

C# MVC4模板只能与字段访问一起使用,c#,asp.net-mvc,asp.net-mvc-4,razor,lambda,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,Lambda,我有一个类似的MVC模型 public class Model { public string Name {get;set;} public int Number {get;set;} } 我收到了错误 模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式 尝试为数字字段创建标签时,模型lambda表达式存储在变量中 例如,在我看来,我有: @Html.LabelFor(model => model.Name) // Works fine @Html

我有一个类似的MVC模型

public class Model
{
     public string Name {get;set;}
     public int Number {get;set;}
}
我收到了错误

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

尝试为数字字段创建标签时,模型lambda表达式存储在变量中

例如,在我看来,我有:

@Html.LabelFor(model => model.Name) // Works fine
@Html.LabelFor(model => model.Number) // Works fine

@{
    Expression<Func<Offer, object>> nameExpression = model => model.Name;
    Expression<Func<Offer, object>> numberExpression = model => model.Number;
}
@Html.LabelFor(nameExpression) // Works fine
@Html.LabelFor(numberExpression) // Error!
@Html.LabelFor(model=>model.Name)//工作正常
@LabelFor(model=>model.Number)//工作正常
@{
表达式名称Expression=model=>model.Name;
表达式numberExpression=model=>model.Number;
}
@LabelFor(nameExpression)//工作正常
@Html.LabelFor(numberExpression)//错误!
我注意到使用调试器时,lambda表达式是
model=>Convert(model.Number)
,而不是
model=>model.Number
,但这只发生在我所知道的值类型上,因为我已经用整数(可为null和不可为null)和
DateTime
对象进行了测试。 lambda表达式的
NodeType
似乎是
Convert
,因为字符串是
Member access

我知道错误本身的原因,但我不知道是什么原因导致编译器计算
model=>model.Number
model=>Convert(model.Number)


谢谢

有一个转换将
model.Number
int
转换为
object
。您可以通过使用调试器查看表达式来检查这一点

.Lambda #Lambda1<System.Func`2[Model,System.Object]>(Model $model) {
    (System.Object)$model.Number
}
.Lambda#Lambda1(型号$Model){
(System.Object)$model.Number
}
如果要获得正确的表达式,必须使用
expression

expressionnumberexpression=model=>model.Number;
此表达式被翻译为

.Lambda #Lambda1<System.Func`2[Model,System.Int32]>(Model $model) {
    $model.Number
}
.Lambda#Lambda1(型号$Model){
$model.Number
}

谢谢!我不敢相信我没有注意到这一点,这是一个愚蠢的错误,但我现在已经开始工作了。
.Lambda #Lambda1<System.Func`2[Model,System.Int32]>(Model $model) {
    $model.Number
}