none
convertir une variable IEnumerable et la passer à un controller RRS feed

  • Discussion générale

  • Bonjour,

    J'utilise .NET Framework 4.0 et je tente de passer une variable (id) à un controller à partir d'une vue. J'ai essayé plusieurs méthodes dont de passer par un array mais en vain. Quelqu'un aurait une idée ?

    Merci!

    • Type modifié Aurel Bera lundi 10 mars 2014 08:53 disc
    vendredi 28 février 2014 16:24

Toutes les réponses

  • Bonjour,

    Côté controller :

    public ActionResult Index()
    {
        int id = 1664;
    
        return View(id);
    }

    Côté vue :

    @model int
    
    <p>Mon ID: @this.Model</p>

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    vendredi 28 février 2014 19:08
    Modérateur
  • Bonjour Gilles,

    Merci pour ta réponse, je me suis peut-être mal expliqué, alors voici plus en détails:

    J'essaie à partir d'un vue fortement typée de passer un ID à un controller aussi fortement typée;

                  

    • <ahref="@Url.Action("Index", "Email", new{ Client = @Model.Id })">

    Mais coté controller «email» il requiert un type IEnumerable, mais pourtant la variable «Model.Id» est de type system32, Est-ce plus clair pour vous?

    Merci de votre collaboration!

    vendredi 28 février 2014 21:59
  • Bonjour,

    Pouvez-vous nous montrer le code C# l'action Index() de votre classe Email ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    samedi 1 mars 2014 10:02
    Modérateur
  • Bonjour à nouveau voici donc le bout de code :

    Le ViewBag étant simplement un test ici.

    En gros, si je n'ai pas de paramètres j'affiche le tout (var email) sinon je récupère l'identifiant numérique qui représente le client et affiche seulement les enregistrements de ce client en question.

    Les Model sont issue de EF6 donc fortement typé.

    Merci de votre aide M. Tourreau!

            public ActionResult Index(int? client)
            {
                ViewBag.testClient = client;
                var email = db.Courriels.ToList();
                if (client == null)
                {
                    return View(email);
                }
                else
                {
                    Courriels duclient = db.Courriels.Find(client);
                    if (duclient == null)
                    {
                        return HttpNotFound();
                    }
                    return View(duclient);
    
                }
    
            }
    

    lundi 3 mars 2014 18:40
  • Bonjour,

    Etant donné que vous avez 2 modèles différents, il est préférable de faire tout simple 2 vues (qui travaillent en entrée sur des modèles différents) :

    public ActionResult Index(int? client)
            {
                ViewBag.testClient = client;
                var email = db.Courriels.ToList();
                if (client == null)
                {
                    return View("MaVueEmail", email);
                }
                else
                {
                    Courriels duclient = db.Courriels.Find(client);
                    if (duclient == null)
                    {
                        return HttpNotFound();
                    }
                    return View("MaVueClient", duclient);
    
                }
    
            }

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    mardi 4 mars 2014 22:46
    Modérateur
  • Bonjour Gilles,

    C'est ce que je tente de faire selon vos recommandations, mais mon problème persiste du fait que la variable passée requiert un élément de type IEnumerable, voici la ligne de mon cast au contrôleur où la variable étant "@Model.Id":

                   

    <a href="@Url.Action("Index", "EmailDuClient", new { client = @Model.Id })">

    Merci de vous occuper de moi :0

    Bonne journée!

    mercredi 5 mars 2014 21:54
  • Bonjour

    Si j'ai bien compris votre problème vous devez transformer un élément dans une IEnumerable

    new List<int>().Add (id) ;

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    vendredi 7 mars 2014 07:36
  • Bonjour Gilles,

    J'ai délaissé quelques peu mon projet mais lorsque j'aurai essayé, je reviendrai vous donner mes commentaires à coup sûr!

    Merci de votre aide

    mercredi 12 mars 2014 13:09
  • Bonjour,

    Mon problème est réglé, il s'agissait finalement d'un mappage par défaut que l' Entity Framework avait créé et qui me causait l'ennui lors du passage de la variable au contrôleur. J'ai supprimer ce mappage nuisible et tout a fonctionné normalement.

    De plus la solution de M. Bera fonctionne également, il faut passer par un vecteur (array) pour convertir une variable en IEnumerable.

    Merci à tous pour votre collaboration, j'ai vraiment apprécié vos suggestions..

    Bonne journée!

    Pierre Tellier

    vendredi 14 mars 2014 15:49