Maison >développement back-end >C++ >Comment puis-je lier efficacement une liste à une vue dans ASP.NET MVC 4 pendant HttpPost ?

Comment puis-je lier efficacement une liste à une vue dans ASP.NET MVC 4 pendant HttpPost ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-27 21:03:13945parcourir

How Can I Effectively Bind a List to a View in ASP.NET MVC 4 During HttpPost?

Liaison de modèle à une liste dans MVC 4

Lorsque vous essayez de lier une liste d'éléments à une vue dans MVC 4, des problèmes peuvent survenir pendant HttpPost. Pour relever ce défi, considérez le modèle suivant :

ViewModel :

Créez un ViewModel contenant la liste IList des éléments :

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

Vue :

Dans la vue, parcourez l'IList et générez des entrées de formulaire pour chaque propriété :

@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)         
}

Action :

Dans la méthode d'action, gérez l'objet MyViewModel publié :

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

Considérations :

  • Seules les propriétés avec les entrées correspondantes dans la vue auront des valeurs sur HttpPost.
  • La liaison de modèle de MVC ne fonctionne que pour les identifiants consécutifs. Si vous masquez des éléments de manière conditionnelle, les données risquent de ne pas être liées correctement.
  • Pour résoudre le problème des lacunes dans les identifiants, envisagez d'utiliser cette solution :
@for( int i = 0; i < Model.Persons.Count(); ++i)
{
    @Html.Hidden($"Persons[{i}].PersonId", Model.Persons[i].PersonId)
    @Html.Editor($"Persons[{i}].FirstName", Model.Persons[i].FirstName) 
    @Html.Editor($"Persons[{i}].LastName", Model.Persons[i].LastName)           
}

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