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")
- Définition de la valeur par défaut d’une propriété DateTime sur DateTime.Now dans la valeur par défaut System.ComponentModel Attrbute
- Quand utiliser Application_Start vs Init dans Global.asax?
- IIS: délai d’inactivité vs recyclage
- Web Config Transform ne fonctionne pas
- Les sections suivantes ont été définies mais n’ont pas été rendues pour la page de disposition “~ / Views / Shared / _Layout.cshtml”: “Scripts”
@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) {
}
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;