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 :

Problème de redirection dans le contrôleur


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 212
    Par défaut Problème de redirection dans le contrôleur
    Bonjour,

    À la clôture d'une méthode de création d'un article je souhaite rediriger vers la liste des articles.
    Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                    return RedirectToAction(nameof(MesArticles));
    J'ai essayé aussi avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return RedirectToAction("MesArticles","Articles");
    La méthode MesArticles() est correctement appelée, et "var articles" est "chargé", mais "return View(articles)" ne renvoie pas vers la page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            public async Task<IActionResult> MesArticles()
            {
                var articles = from s in _repo.GetArticles()
                               select s;
     
                return View(articles);
            }
    Cela s'affiche pourtant bien au démarrage de l'appli ('MesArticles' choisi en page de démarrage) et aussi lorsque l'utilisateur clique sur un lien.
    Dans ces deux cas la méthode "MesArticles" est correctement appelée et la vue s'affiche.

    Il n'y a que pour le "return" du contrôleur que ça ne fonctionne pas.

    Quelque chose doit empêcher le truc de fonctionner dans la méthode "Create" (AjoutArticle) du contrôleur.

    Voici la méthode complète dans le contrôleur :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
            [HttpPost]
            [ValidateAntiForgeryToken]
    
            public async Task<IActionResult> AjoutArticle([Bind("Id,Nom,Description,ArticleRefVendeur,Categorie,SelectedCategorie,SelectedSousCategorie,Matieres,Couleurs,Circa,Style,Pays,Hauteur,Largeur,Profondeur,Diametre,Poids,Designer,NombreLot,NombreUniteDansLot,NombreUnite,EtatArticle,PrixPublic,Negociable,PrixReserve,PrixSolde,DateDebutSolde,DateFinSolde,ParticipationLivraison,CodeLivraisonClasse,LivraisonParVendeur,DateEntree,DateSortie,TauxCommission,DemandeInventaire,Reserver,CodeStatut,Visible,CodeModeration,NotesModeration,PrixPropositionLC,CodePromotion,Crec_Ref,ApplicationUserId")] Articles article)
            {
                if (ModelState.IsValid)
                {
    
                    var files = HttpContext.Request.Form.Files;
    
                    string extension = Path.GetExtension(files[0].FileName);
                    string monfilename = Guid.NewGuid().ToString() + extension;
                    var RepUser = HttpContext.User.Identity.Name;
                    var RepItem = article.Crecidan_Ref;
    
                    // Rename
                    char[] Alphab = "abcdefghijklmnopqrstuvwxyz".ToCharArray();
                    monfilename = monfilename.Replace(monfilename[0], Alphab[0]);
    
                    // F U L L  I M A G E 
                    string UploadFolder = "wwwroot\\upload\\" + RepUser + "\\" + RepItem;
                    string pathString = Path.Combine(Directory.GetCurrentDirectory(), UploadFolder);
                    string UrlImage = UploadFolder + "\\" + monfilename;
    
                    // T H U M B N A I L S  
                    string THUMB_UploadFolder = "wwwroot\\upload\\" + RepUser + "\\" + RepItem + "\\Thumbnails";
                    string THUMB_pathString = Path.Combine(Directory.GetCurrentDirectory(), THUMB_UploadFolder);
                    string THUMB_UrlImage = THUMB_UploadFolder + "\\" + monfilename;
    
                    article.VendeurName = RepUser;
                    article.FirstImage = monfilename;
                    article.CheminFirstImage = THUMB_pathString;
                    article.UrlImage = Path.Combine(Directory.GetCurrentDirectory(), THUMB_UrlImage);
    
                    _repo.CreateArticle(article);
                    await _repo.SaveChangeAsync(article);
    
                    Images result = new Images();
    
                    int i = 0;
                    foreach (IFormFile monfile in files)
                    {
                        if (monfile != null && monfile.Length > 0)
                        {
                            if (i != 0)
                            {
                                extension = Path.GetExtension(monfile.FileName);
                                monfilename = Guid.NewGuid().ToString() + extension;
                                monfilename = monfilename.Replace(monfilename[0], Alphab[i]);
                                THUMB_UrlImage = THUMB_UploadFolder + "\\" + monfilename;
                            }
    
                            // ---- I M A G E S ----
                            Images image = new Images();
                            image.Nom = monfilename;
                            image.Url = Path.Combine(Directory.GetCurrentDirectory(), UrlImage);
    
                            image.ArticlesId = article.Id;
                            _IMG_repo.CreateImage(image);
                            await _IMG_repo.SaveChangeIMGAsync(image);
    
                            bool exists = System.IO.Directory.Exists(pathString);
                            if (!exists) System.IO.Directory.CreateDirectory(pathString);
                            bool Thumb_exists = System.IO.Directory.Exists(THUMB_pathString);
                            if (!Thumb_exists) System.IO.Directory.CreateDirectory(THUMB_pathString);
    
                            // T H U M B N A I L S  
                            MemoryStream target = new MemoryStream();
                            files[i].CopyTo(target);
                            byte[] data = target.ToArray();
    
                            using var photo = new MagickImage(data);
                            var size = new MagickGeometry(250, 250);
                            size.IgnoreAspectRatio = false;
                            photo.Resize(size);
                            // Save the result
                            photo.Write(THUMB_UrlImage, MagickFormat.Jpg);
                            // --------------------
                            i++;
    
                            // F U L L  I M A G E 
                            using FileStream stream = new FileStream(Path.Combine(pathString, monfilename), FileMode.Create);
                            monfile.CopyTo(stream);
    
                            result.Nom = monfilename;
                            result.Url = UploadFolder + "/" + monfilename;
    
                        }
    
                    }
                    return RedirectToAction("MesArticles","Articles");
    
                }
    
                ViewData["ApplicationUserId"] = _repo.GetUserWithArticle(article);
                ViewBag.CategoryId = TrouveCategorie().Select(c => new SelectListItem { Value = c.Id.ToString(), Text = c.Nom }).ToList();
    
                return View(article);
    
            }
    Je récupère mes data de form et une liste d'images (package Filepond).
    Avec ces images je créé des miniatures (package Magick).
    Les images (Full et Thumbnails) sont enregistrées dans "wwwroot".
    Des répertoires spécifiques sont composés à partir du nom de User et de la référence de l'article.

    La table 'Articles' dans la BdD est renseigné par les data et les infos de la miniature de la première image (url, nom etc...)
    La table 'Images' est renseignée avec les infos de toutes les images full de l'article nouvellement créé (url, nom, etc...)


    On trouve beaucoup sur ce sujet sur le net, mais c'est toujours avec des particularités qui ne correspondent pas à mon cas.

    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 212
    Par défaut
    Je reçois une bonne réponse du serveur (200)
    C'est juste la page qui ne s'affiche pas dans le navigateur.

    Nom : Redirect01.jpg
Affichages : 61
Taille : 171,5 Ko

  3. #3
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 212
    Par défaut
    Bonjour,

    Je viens documenter la solution.

    En fait, 'RedirectToAction' dans le contrôleur ne fonctionne pas si le contrôleur est appelé via une fonction Ajax.
    D'après ce que j'ai lu, c'est une convention.

    Il faut donc gérer la redirection dans la réponse de la fonction Ajax.
    'success :' seul ne suffit pas, il faut lui attacher une fonction. Sinon, l'action est exécutée avant que la méthode du contrôleur soit exécutée (en synchrone ou asynchrone, pareil).

    Dans le contrôleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                    //return RedirectToAction("MesArticles", "Articles");
                    return Json(true); // ou n'importe quel retour...
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
                    $.ajax({
                        url: UrlUpload,
                        data: formdata,
                        //async:false,
                        processData: false,
                        contentType: false,
                        method: "post",
                        success: function (result) {
                            window.location.href = "@Url.Action("MesArticles","Articles")";
                        },
    Merci

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

Discussions similaires

  1. Redirection dans un fichier
    Par Spyco dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 14/03/2006, 12h53
  2. probleme de redirection dans les frames
    Par paricard dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 12/02/2006, 00h57
  3. Probleme de redirection dans le form
    Par leloup84 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 07/02/2006, 14h09
  4. Redirection dans un fichier
    Par radium dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 09/08/2005, 14h45
  5. Trouver les redirections dans des traces
    Par severine dans le forum Développement
    Réponses: 3
    Dernier message: 21/04/2004, 18h51

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