web-dev-qa-db-fra.com

Les modèles ne peuvent être utilisés qu'avec des expressions d'accès aux champs, d'accès aux propriétés, d'index de tableaux à une dimension ou d'indexeur personnalisé à un paramètre.

Cette partie du code ne fonctionne pas 

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

et jette une erreur 

[InvalidOperationException: les modèles ne peuvent être utilisés qu'avec les expressions d'accès aux champs, d'accès aux propriétés, aux tableaux à une dimension ou aux indexeurs personnalisés à un paramètre.]

Mais cette partie du code ci-dessous fonctionne comme un charme. 

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

Y a-t-il quelqu'un qui peut expliquer pourquoi?

17
Zenon Iwanicki

Je pense que c'est parce que vous utilisez modelItem => item.Registrations.Count(). DisplayFor souhaite une expression faisant référence à un membre de votre modèle, et non à une fonction de la méthode d'un membre, car le classeur de modèle ne saurait pas comment sérialiser les données au retour (c'est-à-dire après la publication d'un formulaire).

EDIT: J'avais bizarrement eu la même erreur mais pour une raison complètement différente qui s'est avérée être que le DateTime devait être nullable

27
Paul Carroll

Ouais, après un post, pensez que c'est parce que vous utilisez modelItem => item.Registrations.Count (). DisplayFor est une expression qui fait référence à un membre de votre modèle et non à une fonction de la méthode d'un membre, car le classeur de modèle ne saurait pas comment sérialiser les données au retour.

0
ravula sandeep

Je viens de voir ce message d'erreur se produire lors de la tentative de génération d'un contrôle pour un type de données inapproprié, par exemple lors d'une tentative d'utilisation (dans la syntaxe VB.NET):

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

IsLotTraced est déclaré comme

Public Property IsLotTraced As String

L'erreur disparaît quand elle devient

Public Property IsLotTraced As Boolean
0
BlueMonkMN