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

时间:2012-03-29 12:52:24

标签: model-view-controller

此部分代码无效

@foreach (var item in Model) {
        <tr>
            <td>
            @Html.DisplayFor(modelItem=>item.Registrations.Count())
         </td>

并抛出错误

  

[InvalidOperationException:模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。]

但是下面的这部分代码是一种魅力。

@foreach (var item in Model) {
    <tr>
        <td>
           @item.Registrations.Count()
        </td>

有没有人可以解释为什么会这样?

3 个答案:

答案 0 :(得分:28)

我认为这是因为你正在使用modelItem => item.Registrations.Count()DisplayFor想要一个引用模型成员的表达式,而不是成员方法上的函数,因为模型绑定器不知道如何在返回的路上序列化数据(即在表单发布之后)。 / p>

编辑:我奇怪地犯了同样的错误,但原因完全不同,原因是DateTime需要可以为空了

答案 1 :(得分:0)

我刚刚看到在尝试为不适当的数据类型生成控件时出现此错误消息,例如,在尝试使用时(在VB.NET语法中):

@Html.CheckBoxFor(Function(model) model.IsLotTraced)

IsLotTraced声明为的地方

Public Property IsLotTraced As String

更改为时,错误消失

Public Property IsLotTraced As Boolean

答案 2 :(得分:0)

是的,在表单帖子之后认为这是因为你正在使用modelItem =&gt; item.Registrations.Count()。 DisplayFor是一个表达式,它引用模型的成员,而不是成员方法的函数,因为模型绑定器不知道如何在返回的路径上序列化数据。