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 :

Appel Fonction dans vue


Sujet :

ASP.NET MVC

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 8
    Points
    8
    Par défaut Appel Fonction dans vue
    Bonjour a tous,
    Difficilement j'essaie de trouver un moyen d'appeler une fonction de type void dans une vue, sans qu'il y ait un changement de vue.
    Pour le moment j'utilise @Html.ActionLink()
    Mais suite à cela je me retrouve sur une page blanche.
    Quelle fonction dois-je utiliser?
    Merci

  2. #2
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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
    Points : 202
    Points
    202
    Par défaut
    bonjour,
    Je ne comprend pas ce que tu veux faire...
    Pour le moment j'utilise @Html.ActionLink()
    actionLink permet de générer une balise html
    ça va donc te permettre de créer une redirection vers une autre action et donc une autre vue. (c'est surement pour ça que tu te retrouve avec une page blanche)
    Sinon si tu me dit ce que doit faire ta fonction de type void je comprendrai peut être mieux ce que tu veux faire... Veux-tu passer des données à ta vue, ou faire une redirection, ou encore autre chose?

    remarque: asp.net MVC et asp.net sont deux framework complètement différent et l'approche n'est pas du tout la même.
    Es-tu allé voir les tutoriaux de DVP sur le sujet? voici le lien

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    En fait dans la vue j'ai un tableau avec pleins d'éléments.
    J'ai mis un lien vers une fonction void (en utilisant @Html.ActionLink("Envoyer par mail","SendByMail"))qui permet d'evoyer tous les éléments de la page par mail (via outlook qui s'ouvre et propose un mail avec une piece jointe), une fois le mail envoyé, le probleme est que je me retrouve sur une page blanche, je souhaiterai être sur la vue sans la recharger car dedans il y a plusieurs tri sur les éléments du tableau.

    Sur ceux je vais voir ton lien.
    Merci de ta permiere reponse

  4. #4
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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
    Points : 202
    Points
    202
    Par défaut
    bonjour,
    Ce qu'il faut comprendre en asp.net MVC c'est le fonctionnement entre le contrôleur et les vues. Chaque action de ton contrôleur correspond à une vue.
    Si j'ai bien compris:
    Lorsque tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @Html.ActionLink("Envoyer par mail","SendByMail"))
    tu te redirige vers l'action "SendByMail" qui doit contenir ton code pour l'envoie du mail et qui normalement doit renvoyer une vue. Normalement tu doit avoir un
    à la fin de ton action et si tu n'a pas créé une vue correspondant à ton action tu tombe sur une page blanche...
    Il faudrait que a la fin de ton action "SendByMail" tu effectue une redirection vers ton action qui affiche le tableau. tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return redirectToAction(...);
    Sinon tu peux aussi nous montrer ton code (entre les balises [code] bien sûr ), ça serai plus simple pour t'aider...

    cordialement

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Merci pour ta réponse,
    je vais utiliser une autre methode alors,
    Je vais executer ma fonction sendByMail dans une pop up,
    j'ai changé aussi la façon de creer le mail, j'en fait un moi meme sans passer par outlook, d'ou l'intéret de la pop up
    Merci

  6. #6
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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
    Points : 202
    Points
    202
    Par défaut
    Je ne connais pas le fonctionnement de ton appli, mais je te donne une autre solution, ça peut toujours être intéressant

    Un exemple de code que j'ai fait pour un module de formulaire de contact dans un site.
    Au niveau du controleur tu va avoir deux actions qui sont en fait les même, une première d'affichage et une deuxième décoré avec [httpPost] qui fera les traitements dont tu as besoin(dans ton cas envoie du mail) :
    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
     
     /// <summary>
            /// permet d'afficher le formulaire de contact
            /// </summary>
            /// <returns></returns>
            public ActionResult CreateFormulaire()
            {
                ViewData["pays"] = new SelectList(_service.ListPays(), "idWsgPays", "nomWsgPays");
                return View();
            }
            /// <summary>
            /// permet d'enregistrer le formulaire de contact et d'envoyer un mail a l'admin du site, une fois le premier post de formulaire fait l'action s'occupe également d'afficher le formulaire
            /// </summary>
            /// <param name="wsgFormulaireToCreate"></param>
            /// <returns></returns>
            [HttpPost]
            public ActionResult CreateFormulaire(WsgModuleFormulaireContact wsgFormulaireToCreate)
            {
                ViewData["pays"] = new SelectList(_service.ListPays(), "idWsgPays", "nomWsgPays");
     
                if (ControllerContext.HttpContext.Request.Form["FAC"] != null)
                {
                    if (_service.CreatFormulaire(wsgFormulaireToCreate))
                    {
                        //permet de faire un envoie de mail
                        var from = wsgFormulaireToCreate.emailWsgModuleFormulaireContact;
                        var to = ConfigurationManager.AppSettings["adresseEnvoiFormulaireContact"].ToString();
                        var cc = wsgFormulaireToCreate.emailWsgModuleFormulaireContact;
                        var bcc = ConfigurationManager.AppSettings["archivesFormulaire"].ToString();
                        var body = wsgFormulaireToCreate.nomWsgModuleFormulaireContact + wsgFormulaireToCreate.prenomWsgModuleFormulaireContact + wsgFormulaireToCreate.autreWsgModuleFormulaireContact;
                        var subjet = "formulaire de contact";
                        MailMessage mail = new MailMessage();
                        mail.From = new MailAddress(from.ToString());
                        mail.To.Add(new MailAddress(to.ToString()));
                        mail.CC.Add(new MailAddress(cc.ToString()));
                        mail.Bcc.Add(new MailAddress(bcc.ToString()));
                        mail.Subject = subjet;
                        mail.Body = body;
                        mail.Priority = MailPriority.Normal;
                        SmtpClient smtp = new SmtpClient();
                        smtp.Send(mail);
     
                        ModelState.Clear();
                        var reponse = ViewData["reponse"] = "Votre message été envoyé avec succès";
                        return View("CreateFormulaire", null);
                    }
                    else
                    {
                        var erreur = ViewData["erreur"] = "Il y a eu un probleme lors de l'enregistrement, veuillez recommencer ultérieurement";
                        return View();
                    }
                }
                else
                {
                    ModelState.Clear();
                    ModelState.Remove("nomWsgModuleFormulaireContact");
                    ModelState.Remove("emailWsgModuleFormulaireContact");
                    return View();
                }
            }
    dans la deuxième action la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (ControllerContext.HttpContext.Request.Form["FAC"] != null)
    permet de tester si le bouton de ma vue a bien été cliqué, si c'est le cas j'ajoute le nouvelle objet en base, puis j'envoie le mail.
    ma vue est fortement typé(c'est un simple formulaire a remplir)
    La ligne ou il y a le bouton est celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" name="FAC" value="envoyer" />
    en espérant t'aider,
    cordialement

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    C'est intéréssant, je savais pas que l'on pouvais tester les boutons dans le post, par contre je vais quand meme laisser la pop up car j'ai besoin que l'utilisateur se crée lui meme un mail(pas de valeur par default, ni en passant par outlook) sans pour autant changer l'affichage de la fenetre pricipale.
    Mais ta solution me servira dans d'autre cas de figure ou je créais deux fonctions pour des actions presque semblable.
    Merci
    EDIT : est-ce qu'il serait possible que dans une vue on n'affiche pas le menu du _Layout?

  8. #8
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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
    Points : 202
    Points
    202
    Par défaut
    Bonjour,
    Si dans Layout tu entend masterpage alors oui c'est possible, lorsque tu crée une page via l'interface, tu as un chexbox intitulé "Sélectionner une page maitre" (il est coché par défaut) si tu le décoche tu n'aura plus de référence à une masterpage.

    Au niveau du code de ta page, ça ce passe au niveau de la première ligne de code.
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/HomePage.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
    Dans la partie en gras tu définit le nom de ta masterpage, tu peut donc supprimer cette partie ou définir une autre masterpage que tu aura créer au par avant.

    remarque:Si tu a besoin de définir dynamiquement les masterpages de tes vue tu peut le faire directement dans l'action de ton contrôleur lorsque tu fait appelle a ta vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return View(MaVue, MaMasterpage)
    En espérant avoir bien compris ta question,
    cordialement

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Merci infiniment, c'est parfait!!
    Je mets donc le post en résolu.
    Merci encore

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

Discussions similaires

  1. Appel fonction dans le DllMain
    Par dd16 dans le forum C++
    Réponses: 1
    Dernier message: 07/02/2007, 15h19
  2. popup et appel fonction dans fentre parent
    Par wehtam dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/11/2006, 16h25
  3. Pb appel fonction dans une lib
    Par mamok dans le forum MFC
    Réponses: 14
    Dernier message: 01/02/2006, 18h40
  4. PB pour Appel fonction dans DLL sur Builder3
    Par Fbartolo dans le forum C++Builder
    Réponses: 15
    Dernier message: 10/03/2005, 12h58

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