Maison >développement back-end >C++ >Comment gérer efficacement la liaison de modèle avec des listes dans ASP.NET MVC 4 ?

Comment gérer efficacement la liaison de modèle avec des listes dans ASP.NET MVC 4 ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-03 09:32:39721parcourir

How to Effectively Handle Model Binding with Lists in ASP.NET MVC 4?

Liaison de modèle à une liste dans MVC 4

Lorsque vous essayez de lier une liste d'éléments à une vue, des problèmes peuvent survenir avec la méthode HttpPost. Bien que des ressources utiles telles que l'article de Phil Haack existent, elles peuvent ne pas refléter les mises à jour potentielles de MVC 4. Pour résoudre ce problème, explorons une solution détaillée.

ViewModel Configuration

public class MyViewModel
{
   public List<Person> Persons{get;set;}
}

Afficher la mise en œuvre

@model MyViewModel

@for( int i = 0; i < Model.Persons.Count(); ++i)
{
    @Html.HiddenFor(m => m.Persons[i].PersonId)
    @Html.EditorFor(m => m.Persons[i].FirstName) 
    @Html.EditorFor(m => m.Persons[i].LastName)         
}

Actions Méthode

[HttpPost]public ViewResult(MyViewModel vm)
{
...
}

Considérations

Notez que seules les propriétés avec des champs de saisie auront des valeurs après la publication. De plus, la liaison de modèle de MVC ne reconnaît que les identifiants consécutifs. Prenons cet exemple où un élément est masqué sous condition :

@for( int i = 0; i < Model.Persons.Count(); ++i)
{
    if(i != 4)//conditionally hide 5th item, 
    { //but BUG occurs on postback, all items after 5th will not be bound to the the list
      @Html.HiddenFor(m => m.Persons[i].PersonId)
      @Html.EditorFor(m => m.Persons[i].FirstName) 
      @Html.EditorFor(m => m.Persons[i].LastName)           
    }
}

Dans ce cas, seuls les quatre premiers éléments seront liés à la publication. Pour éviter cela, assurez-vous d'avoir des identifiants consécutifs pour tous les éléments de la liste IL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn