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 Discussion :

MVC passage paramètre de actionResult->View->actionResultBis


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 100
    Points : 47
    Points
    47
    Par défaut MVC passage paramètre de actionResult->View->actionResultBis
    Bonjour,

    J'ai un problème de copie de chaîne que je n'arrive pas à résoudre malgré le parcours d'internet ... oui, les chaines sont immuables ... mais bon, je trouve pas la solution ...

    dans un projet asp.net MVC j'ai une routage avec 3 paramètres à passer dans l'url. lors du GET, je peux récupérer ces 3 paramètres sans problème MAIS JE VEUX en stocker un (offerId) dans param1 ce qui marche très bien dans la méthode Index(). mais dans IndexBIS, param1 vaut toujours "".
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    routes.MapRoute(
                   name: "Import",
                   url: "{controller}/{action}/{OfferId}/{TypeOfferId}/{Async}",
                   defaults: new { controller = "Home", action = "Index", OfferId="",TypeOfferId="", Async = UrlParameter.Optional }
               );
    Dans mon controller :
    Code C# : 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
     
     public class HomeController : Controller
        {
            public string param1 = "";
     
            public ActionResult Index(string offerId , string typeOfferId, string async)
            {
               // divers essai 
                param1 = this.ControllerContext.RouteData.Values["offerId"].ToString();
     
                //param1 = String.Copy(this.ControllerContext.RouteData.Values["offerId"].ToString());
     
                //param1.Insert(0, offerId);
     
               // CopyTo HS
     
     
                return View("IndexBIS");
            }
     
     
            //[HttpPost]
            public ActionResult IndexBIS(HttpPostedFileBase nomDuFichier)
            {
                // test recup param1
     
                string localString = param1;
     
                return View("IndexBIS");
            }

  2. #2
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Salut,

    Des que tu appel un "controller" une nouvelle instance est crée => "new HomeController()".

    Voici un peu de code pour illustrer ma phrase ci-dessus et pour passer des valeurs entre des actions (TempData) ou une action et une vue(ViewBag, ViewData):

    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
    public class HomeController : Controller
        {
            private string _test;
     
            public HomeController()
            {
                _test = "Construteur";
            }
     
            public ActionResult Action()
            {
                _test = "Action";
                TempData.Add("test", "ActionTempData");
                ViewBag.Test = "ViewBagTest";
                ViewData.Add("test2", "ActionViewData");
                return RedirectToAction("ActionBis");
            }
     
            public ActionResult ActionBis()
            {
                //valeur = "Construteur"
                var valeur = _test;
                // tempDataTest = ActionTempData
                var tempDataTest = TempData["test"];
                // viewBagTest = null
                var viewBagTest = ViewBag.Test;
                //viewDataTest = null
                var viewDataTest = ViewData["test2"];
                return View();
            }

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 100
    Points : 47
    Points
    47
    Par défaut
    Merci KatKiller pour cette information.

    Je ne connaissais pas TempData et c'est interessant de voir que le contenu persiste dans la situation que tu donnes, j'ai donc appliqué à mon cas ...
    mais ca ne marche pas (j'utilise return view et pas RedirectToAction) et ... j'imagine ... que du coup une nouvelle instance de controller est créée dans ce cas

    A la base, je dois faire un page d'upload de fichier mais je dois récupérer les paramètres de l'url car ils me servent dans l'analyse du contenu du fichier uploadé.
    L'action Index m'affiche la page upload contenant un <input file>, l'action IndexBIS est déclenchée sur le clic du bouton Upload dans cette même page.


    Toujours en galère ... Merci à vous pour votre aide ..

  4. #4
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Il est souvent assez simple de créer un "viewModel" qui contient les informations nécessaires à la vue...

    ViewModel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public class ActionForm
        {
            public string MaValeur { get; set; }
            public HttpPostedFileBase File { get; set; }
        }
    Controller :
    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
        public class HomeController : Controller
        {
            [HttpGet]
            public ActionResult Action()
            {
                var actionForm = new ActionForm { MaValeur = "LaValeurQueJeVeuxGarder" };
                return View(actionForm);
            }
     
            [HttpPost]
            public ActionResult Action(ActionForm actionForm)
            {
                // maValeur = "LaValeurQueJeVeuxGarder";
                var maValeur = actionForm.MaValeur;
                return RedirectToAction("Index");
            }
        }
    }
    View :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @model MvcApplication1.Models.ActionForm
     
    @{
        ViewBag.Title = "Action";
    }
     
    @using (Html.BeginForm("Action", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        @Html.HiddenFor(p => p.MaValeur)
        @Html.TextBoxFor(p => p.File, new { type = "file" })
        <input type="submit" value="Save" />
    }

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 100
    Points : 47
    Points
    47
    Par défaut
    Merci KatKiller

    Solution en place avec un ViewModel contenant les paramètres de l'url...

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

Discussions similaires

  1. Passage paramètre du View to Controlleur
    Par nabich dans le forum JSF
    Réponses: 0
    Dernier message: 01/06/2012, 13h25
  2. Réponses: 2
    Dernier message: 13/10/2010, 11h07
  3. Réponses: 10
    Dernier message: 03/12/2009, 21h45
  4. [JSP] Problème passage paramètre
    Par besco dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 13/09/2004, 10h15
  5. Fenêtre enfant MDI : passage paramètre à la création
    Par Orangina dans le forum C++Builder
    Réponses: 3
    Dernier message: 21/07/2004, 11h55

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