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 :

redirection avec parametre après une suppresion


Sujet :

ASP.NET MVC

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 119
    Par défaut redirection avec parametre après une suppresion
    bonjour,
    Je suis entrain de réaliser un CMS en asp.net MVC2 avec .net 4.0. J'ai donc une notion de page et de contenu. Une page possède plusieurs contenus (article, actualité, publication, et autres). Lorsque je supprime un contenu dans une page je doit être redirigé sur la liste des contenus restant dans la page sélectionnée. Si il n'y a plus de contenu dans la page je doit être redirigé vers la page de création de contenu.
    Voici l'action du delete de mon contenuController:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [HttpPost]
            public ActionResult Delete(wsgContenu wsgContenuToDelete)
            {
                var idPage = wsgContenuToDelete.idWsgPageWsgContenu;
                if (_service.DeleteContenu(wsgContenuToDelete))
                    return RedirectToAction("Index" ,new { id = idPage });
                return View();
            }
    Et voici l'action index qui est appelé dans le redirectToAction du delete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public ActionResult Index(int id)
            {
                ViewData["nomModule"] = _service.NomModule(id);
                ViewData["idPage"] = id;
                if(_service.ListContenu(id).Count() >=1)
                return View(_service.ListContenu(id));
                return RedirectToAction("create", new { id=id});
            }
    Le problème est à mon avis au niveau du passage de l'id dans le redirectToAction. l'id passe en faite à 0 au lieu de rester celui de la page dans laquelle ont est.
    j'ai également testé de faire comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [HttpPost]
            public ActionResult Delete(wsgContenu wsgContenuToDelete)
            {
                if (_service.DeleteContenu(wsgContenuToDelete))
                    return RedirectToAction("Index", new { id = wsgContenuToDelete.idWsgPageWsgContenu });
                return View();
            }
    Mais le problème reste le même.
    Je ne comprend pas pourquoi l'id de la page passe à 0 et ne reste pas celui de la page en cours surtout que j'utilise la même méthode pour les actions create et update qui elles marchent sans problème.
    Si quelqu'un a une explication ou même une piste je suis preneur
    Merci pour le temps passé sur mon post.
    Cordialement

  2. #2
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Par défaut
    bonjour,
    j'aimerais bien savoir pourquoi dans l'action delete tu as deux Return.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Par défaut
    désolé, je me suis un peu précipité, je viens de comprendre le truc.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 119
    Par défaut
    bonjour,
    le premier return permet de me rediriger vers l'action index si la suppression a bien fonctionné et le deuxième me permet de rester sur la page delete si la suppression n'a pas marché.
    cordialement

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Par défaut
    Salut,

    Que est le type de wsgContenuToDelete.idWsgPageWsgContenu ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 119
    Par défaut
    bonjour,
    J'ai une page qui possède un ou plusieurs contenus.
    J'ai un contenu qui est dans une page et dans un contenu j'ai un ou plusieurs module du même type (article, actualité, publication...)
    Le champ wsgContenuToDelete.idWsgPageWsgContenu est donc l'id de la page correspondant au contenu. C'est une clé étrangère. wsgContenuToDelete est l'objet contenu que je viens de supprimer.
    Elle me permet de récupérer l'id de la page dans laquelle j'ai fait une opération du CRUD et dans mon action index d'afficher la liste des contenu de la page mis a jour après l'opération de CRUD effectué. Cette méthode est utilisé pour les opérations de création et de mise à jour de contenu et marche bien mais dans l'opération de suppression ce n'est pas le cas...
    j'espère avoir été clair et t'avoir aidé à mieux comprendre mon problème.
    cordialement

  7. #7
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Par défaut
    Merci, c'est clair mais cela ne répond pas à ma question:

    Quel est le type de wsgContenuToDelete.idWsgPageWsgContenu ?
    int, float, string ?

    Et surtout que donne wsgContenuToDelete.idWsgPageWsgContenu.toString() ?

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 119
    Par défaut
    Le type de wsgContenuToDelete.idWsgPageWsgContenu est int32.
    Je ne suis pas sur d'avoir bien compris ta question:
    Et surtout que donne wsgContenuToDelete.idWsgPageWsgContenu.toString() ?
    Lorsque je stocke ce champ dans un variable dans mon actionResult décoré par post (donc celui qui s'exécute lors du submit de la page suppression) et que je met un point d'arrêt à ce niveau la valeur est égale a 0 ce qui ne devrai pas être le cas.
    En fait tout les champs de l'objet wsgContenuToDelete que je reçoit en paramètre sont égale à 0 ou null...

  9. #9
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Par défaut
    Re,

    Donc en gros ton problème c'est que ton objet posté n'as pas les paramètres remplis.
    Envoie, le code de la vue de delete, ainsi que ton modèle wsgContenu.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 119
    Par défaut
    Dans mon model j'ai une couche donné et une couche service.
    Voila ma couche donnée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public wsgContenu GetContenu(int id)
            {
                return (from c in _entite.wsgContenu where c.idWsgContenu == id select c).FirstOrDefault();
            }
     public void DeleteContenu(wsgContenu wsgContenuToDelete)
            {
                var contenuOrigine = GetContenu(wsgContenuToDelete.idWsgContenu);
                _entite.DeleteObject(contenuOrigine);
                _entite.SaveChanges();
            }
    la couche service appelle l'interface implémenté à partir de la couche donnée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public bool DeleteContenu(wsgContenu wsgContenuToDelete)
            {
                try
                {
                    _donnee.DeleteContenu(wsgContenuToDelete);
                }
                catch
                {
                    return false;
                }
                return true;
            }
    Le contrôleur appelle l'interface de la couche service.
    Et voici la vue:
    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
     
    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MaquetteNouvelleSolution.Models.wsgContenu>" %>
     
    <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    	supprimer
    </asp:Content>
     
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
     
        <h2>supprimer</h2>
     
        <h3>Etes vous sûr de vouloir effectuer cette suppression?</h3>
        <fieldset>
            <legend>contenu</legend>
     
            <div class="display-label">id</div>
            <div class="display-field"><%: Model.idWsgContenu %></div>
     
            <div class="display-label">Page</div>
            <div class="display-field"><%: Model.wsgPage.nomWsgPage %></div>
     
            <div class="display-label">Module</div>
            <div class="display-field"><%: Model.wsgModule.nomWsgModule %></div>
     
            <div class="display-label">titre</div>
            <div class="display-field"><%: Model.titreWsgContenu %></div>
     
            <div class="display-label">position</div>
            <div class="display-field"><%: Model.positionWsgContenu %></div>
     
            <div class="display-label">visible</div>
            <div class="display-field"><%: Model.visibleWsgContenu %></div>
     
            <div class="display-label">date Debut</div>
            <div class="display-field"><%: String.Format("{0:g}", Model.dateDebutWsgContenu) %></div>
     
            <div class="display-label">date Fin</div>
            <div class="display-field"><%: String.Format("{0:g}", Model.dateFinWsgContenu) %></div>
     
        </fieldset>
        <% using (Html.BeginForm(new { Model.idWsgContenu}))
           { %>
            <p>
    		    <input type="submit" value="enregistrer" /> |
    		    <%: Html.ActionLink("Retour", "Index", new { id = ViewData["idPage"] })%>
            </p>
        <% } %>
     
    </asp:Content>
    PS: je rappelle que la suppression fonctionne bien, c'est uniquement la redirection qui pose problème.
    En fait il y a un champ qui n'est pas null dans l'objet wsgContenuToDelete, c'est l'id du contenu (la clé primaire)
    cordialement

  11. #11
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Par défaut
    Ajoute un hiddenField et stocke dedans idWsgPageWsgContenu

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        <% using (Html.BeginForm(new { Model.idWsgContenu}))
           { %>
            <p>
                        <%= Html.Hidden("idWsgPageWsgContenu",Model.idWsgPageWsgContenu) %>
    		    <input type="submit" value="enregistrer" /> |
    		    <%: Html.ActionLink("Retour", "Index", new { id = ViewData["idPage"] })%>
            </p>
        <% } %>

  12. #12
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 119
    Par défaut
    Merci beaucoup mermich ça marche nickel!!!

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

Discussions similaires

  1. Reprendre la main avec SAS après une utilisation de Matlab
    Par 8twilight8 dans le forum SAS Base
    Réponses: 5
    Dernier message: 03/03/2009, 11h21
  2. Réponses: 1
    Dernier message: 15/09/2008, 14h38
  3. Response.Redirect avec Création d'une fentre
    Par jerome.fortias dans le forum ASP.NET
    Réponses: 3
    Dernier message: 13/09/2007, 18h05
  4. Réponses: 4
    Dernier message: 08/01/2007, 13h06
  5. Redirection avec parametres
    Par rafounette dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/11/2006, 12h08

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