«Les modèles ne peuvent être utilisés qu’avec l’access aux champs, l’access aux propriétés, l’index de tableau à une dimension ou les expressions d’indexeur personnalisées à un seul paramètre»

Pourquoi je reçois l’erreur:

Les modèles ne peuvent être utilisés qu’avec l’access aux champs, l’access aux propriétés, l’index de tableau à une dimension ou les expressions d’indexeur personnalisées à un seul paramètre.

à ce code:

@model IEnumerable @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_PageLayout.cshtml"; } 

Index

@Html.ActionLink("Create New", "Create")

    @foreach (var item in Model) {
  • @Html.ActionLink(item.Name,"Details",new {id=item.ID})
    @Html.DisplayFor(modelItem=>@ssortingng. item.Description.ToSsortingng().Subssortingng(0,100))
  • }

à la ligne:

 @Html.DisplayFor(modelItem=>item.Description.ToSsortingng().Subssortingng(0,100)) 

Mettre à jour:

Problème résolu. J’ai ajouté à mon code:

  @{ ssortingng parameterValue = item.Description.ToSsortingng().Subssortingng(0, 100); } @Html.DisplayFor(modelItem=>parameterValue) 

Mon nouveau code:

 @foreach (var item in Model) { 
  • @Html.ActionLink(item.Name,"Details",new {id=item.ID})
    @{ ssortingng parameterValue = item.Description.ToSsortingng().Subssortingng(0, 100); } @Html.DisplayFor(modelItem=>parameterValue)
  • }

    Ceci n’est qu’une possibilité. Juste par curiosité, existe-t-il une autre solution pour résoudre l’erreur?

    J’ai eu le même problème avec quelque chose comme

     @foreach (var item in Model) { @Html.DisplayFor(m => !item.IsIdle, "BoolIcon") } 

    J’ai résolu cela juste en faisant

     @foreach (var item in Model) { var active = !item.IsIdle; @Html.DisplayFor(m => active , "BoolIcon") } 

    Lorsque vous connaissez le truc, c’est simple.

    La différence est que, dans le premier cas, j’ai passé une méthode en paramètre alors que dans le second cas, c’est une expression.

    Le modèle DisplayFor il fait référence est l’assistant DisplayFor .

    DisplayFor s’attend à recevoir une expression conforme aux règles spécifiées dans le message d’erreur.

    Vous essayez de passer une chaîne de méthodes à exécuter et elle ne l’aime pas.

    Ceci est un exemple parfait de la façon dont le modèle MVVM (Model-View-ViewModel) est utile.

    Vous pourriez emballer votre classe de modèle Trainer dans une autre classe appelée TrainerViewModel qui pourrait fonctionner comme ceci:

     class TrainerViewModel { private Trainer _trainer; public ssortingng ShortDescription { get { return _trainer.Description.ToSsortingng().Subssortingng(0, 100); } } public TrainerViewModel(Trainer trainer) { _trainer = trainer; } } 

    Vous devez modifier votre classe de modèle de vue pour qu’elle contienne toutes les propriétés nécessaires pour afficher ces données dans la vue, d’où le nom ViewModel.

    Ensuite, vous modifiez votre contrôleur pour renvoyer un object TrainerViewModel plutôt qu’un object Trainer et modifiez également votre déclaration de type de modèle dans votre fichier de vue en TrainerViewModel .

    J’ai rencontré un problème similaire avec le même message d’erreur en utilisant le code suivant:

     @Html.DisplayFor(model => model.EndDate.Value.ToShortDateSsortingng()) 

    J’ai trouvé une bonne réponse ici

    Il s’avère que vous pouvez décorer la propriété dans votre modèle avec un displayformat, puis appliquer une chaîne de données.

    Veillez à importer la lib suivante dans votre modèle:

     using System.ComponentModel.DataAnnotations;