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 :

C# ASP.NET MVC 1.0 eviter les redondances


Sujet :

ASP.NET MVC

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 14
    Points
    14
    Par défaut C# ASP.NET MVC 1.0 eviter les redondances
    Bonjour,

    Je developpe un site web en C# MVC 1.0. Sur plusieurs de mes pages (pas toutes) je souhaite ajouter un petit formulaire commentaire basic (Title, Comment, save) avec une liste de tous les commentaires précédemment postés. je souhaiterai savoir quel est le meilleur moyen pour faire cela de manière a ne pas re-créer, re-coder dans chacun de mes Controller l'action suivante : public ActionResult AddComment().

    Je pensais créer un controller "CommentController" puis une partial vue FormComment.ascx que je place dans l'ensemble des pages ou je souhaite faire apparaitre ce formulaire. Ensuite dans ma partial vue je crée un formulaire comme ceci : <form action="/Comment(Controller)/AddComment" method="post">[...]</form> puis dans le code de l'action AddComment je traite les infos puis je redirige vers la page initial (celle sur laquelle l'utilisateur a cliqué sur save).
    Mais je suis persuadé qu'il existe une manière de faire beaucoup plus propre.

    Je crois par exemple que lorsque l'on développe en webform il suffit de créer un userControl puis de l'inserer partout ou l'on en a besoin.

  2. #2
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Salut,

    ce que tu cherches à faire, c'est à utiliser RenderAction

    Genre, tu as une table de commentaires que tu mets dans une vue partielle List pour un contrôleur Commentaires, et, dans tes vues, tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%= Html.RenderAction("List", "Commentaires"); %>
    Et voila

    (nb : je n'ai pas mvc sur cette machine, alors ca peut ne pas être exactement ca )

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Salut Philippe merci de t'intéresser a mon problème, en effet le RenderAction permet d'afficher des partial view. Mais dans le cas présent cela permet de factoriser uniquement le rendu de mon module comment. Je souhaitai savoir s'il existait une manière de factoriser également mes actions dans mon controller.

    exemple:

    j'ai les deux controller suivant avc les actions suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Page1Controller 
     
    public ActionResult Index()
    {
    	return View();
    }
     
    Page2Controller 
     
    public ActionResult Index()
    {
    	return View();
    }

    Si je veux integrer mon module commentaire je dois ajouter dans mes 2 controller les actions suivantes

    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
    public ActionResult ListComment(...)
    {
    	[MonCODE]
    	return View();
    }
    public ActionResult CreateComment(...)
    {
    	[MonCODE]
    	return View();
    }
    public ActionResult EditComment(...)
    {
    	[MonCODE]
    	return View();
    }
    Ce que je voudrais savoir c est s'il existe un moyen de "factoriser" également ces 3 actions qui seront communes a bon nombre de mes controller.

  4. #4
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    MMhhh,comme le dis Philippe, pourquoi ne pas avoir un controller "comment" avec les fonctions ci dessous qui renvoie une partial view?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%= Html.RenderAction("ListComment", "CommentController") %>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public ActionResult ListComment(...)
    {
    return View();
    }
    public ActionResult CreateComment(...)
    {
     
    return View();
    }
    public ActionResult EditComment(...)
    {
    return View();
    }

  5. #5
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Non, justement, tes actions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public ActionResult ListComment(...)
    public ActionResult CreateComment(...)
    public ActionResult EditComment(...)
    devraient se trouver dans ton controlleur Commentaires.

    RenderAction appelle un controlleur, au contraire de RenderPartial, donc l'idée, c'est bien de virer toute la gestion de tes commentaires dans le controlleur et les vues adéquates.

    Après, j'ai peut-être pas compris le fond de ton pb

    Sinon, si tu veux avoir un moyen de factoriser, tu dois pouvoir faire une classe Controlleur de base, dont tu hérites

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  6. #6
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    En effet j ai du lire trop vite ta réponse phillippe!! j ai pas fait la différence entre le RenderPartial() et le RenderAction() en lisant la doc de ce dernier je me dis que ce doit être la meilleur solution finalement. Je vais tester tout ca ce soir.
    Thx!!!

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/12/2014, 18h39
  2. Les nouveautés d'ASP.NET MVC 2
    Par Louis-Guillaume Morand dans le forum ASP.NET MVC
    Réponses: 10
    Dernier message: 07/08/2013, 16h26
  3. Réponses: 1
    Dernier message: 28/02/2011, 10h28

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