IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET MVC Discussion :

récupérer un item d'une list pour édition. [Débutant]


Sujet :

ASP.NET MVC

  1. #1
    Membre habitué
    Inscrit en
    Février 2012
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 121
    Points : 157
    Points
    157
    Par défaut récupérer un item d'une list pour édition.
    Bonjour à tous,

    Je bosse avec northwind.

    Je suis parvenu à afficher une liste de customer, avec les Actionlink Edit et Detail pour chaque ligne, maintenant je voudrais afficher une vue pour editer une ligne en particulier.

    Seul soucis, je n'arrive pas à récupérer la ligne en question (le customer, ou son id pour le retrouver) que faire ?

    ma grille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    @model IEnumerable<GestionGridMVC4.ViewModels.Customer>
    
    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Index</h2>
    
    <p>
        @Html.ActionLink("Create New", "Create")
    </p>
    <table>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Customer_ID)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Company_Name)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Contact_Name)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Address)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.City)
            </th>
            <th></th>
        </tr>
    
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Customer_ID)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Company_Name)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Contact_Name)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Address)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.City)
                </td>
                <td>
                    @Html.ActionLink("Edit", "Edit", new { id = item.Customer_ID }) | <= actionLink me permettant de rentrer dans la méthode Edit du controller "home"
                @Html.ActionLink("Details", "Details", new { id = item.Customer_ID }) |
                @Html.ActionLink("Delete", "Delete", new { id = item.Customer_ID })
                </td>
            </tr>
        }
    
    </table>
    le controller associé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using BusinessLayer;
    using Data;
    
    namespace GestionGridMVC4.Controllers
    {
        public class HomeController : Controller
        {
            List<Data.Customer> customerDAL = new List<Customer>();
    
            //
            // GET: /Home/
    
            public ActionResult Index()
            {
                customerDAL = BusinessLayer.CustomerService.LoadCustomers();
                List<ViewModels.Customer> customersVM = new List<ViewModels.Customer>();
    
                foreach (Data.Customer item in customerDAL)
                {
                    customersVM.Add(ConvertDALToVM(item));
                }
    
                return View(customersVM);
            }
    
            
            public ActionResult Edit(ViewModels.Customer customer) <= je voudrais récupérer mon customer ici !!!
            {
    
                return View(customer);
            }
    
        }
    }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je ne suis pas du tout expert en ASP.NET MVC, mais il me semble que, vu que ton action Edit est appelée à partir d'un lien qui comporte juste l'id, il faudrait que la méthode Edit du contrôleur prenne en paramètre l'id, et non un objet Customer...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            public ActionResult Edit(int id)
            {
                var customer = /* récupérer le customer dans la DB à partir de l'id */;
                return View(customer);
            }
    Pour qu'une action puisse prendre un objet complexe en paramètre, il faut qu'elle soit appelée par POST ou PUT, et non par GET...

  3. #3
    Membre habitué
    Inscrit en
    Février 2012
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 121
    Points : 157
    Points
    157
    Par défaut
    Exact, en fait pour être plus précis, il faut que le paramètre de ma méthode Edit soit de meme type (ce qui est normal), mais porte aussi le même nom que déclaré dans le ActionLink :

    @Html.ActionLink("Edit", "Edit", new { id = item.Customer_ID })

    Donc, il faudra ici que la signature de ma méthode soit :

    Public/private ActionResult Edit(string id)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Dev infopath pour modifier 1 item d'une liste et plusieurs items d'une autre liste
    Par Nico2010 dans le forum Développement Sharepoint
    Réponses: 2
    Dernier message: 19/04/2012, 17h30
  2. [MySQL] récupérer la valeur d'une liste déroulante pour paramètrer le lien d'un panier dynamique
    Par roy-mustang dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/06/2011, 17h34
  3. Réponses: 1
    Dernier message: 01/08/2010, 17h52
  4. Comment faites-vous pour récupérer la valeur d'une liste dynamique ?
    Par Cvbdev dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 03/06/2010, 10h01
  5. Réponses: 4
    Dernier message: 03/05/2007, 21h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo