Templates can be used only with field access, prop

2019-04-18 17:15发布

This part of code is not working

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

and throws an error

[InvalidOperationException: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.]

But this part of code below is working as a charm.

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

Is there anybody who can explain why is so?

3条回答
疯言疯语
2楼-- · 2019-04-18 17:47

I'd think it's because you're using modelItem => item.Registrations.Count(). DisplayFor wants an expression that refers to a member of your model, not a function on a member's method as the model binder wouldn't know how to serialize the data on the way back (i.e. after a form post).

EDIT: I'd weirdly had the same error but for a completely different reason which turned out to be that the DateTime needed to be nullable

查看更多
等我变得足够好
3楼-- · 2019-04-18 18:03

Yeah, After a form post think it's because you're using modelItem=>item.Registrations.Count(). DisplayFor is an expression that refers to a member of your model, not a function on a member's method as the model binder wouldn't know how to serialise the data on the way back.

查看更多
何必那么认真
4楼-- · 2019-04-18 18:14

I just saw this error message occur when attempting to generate a control for an inappropriate data type, for example, when trying to use (in VB.NET syntax):

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

Where IsLotTraced is declared as

Public Property IsLotTraced As String

The error goes away when it's changed to

Public Property IsLotTraced As Boolean
查看更多
登录 后发表回答