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 :

Suite à migration vers MVC3 - event OnLoggingIn pas appelé


Sujet :

ASP.NET MVC

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 3
    Par défaut Suite à migration vers MVC3 - event OnLoggingIn pas appelé
    Bonjour,

    J'ai migré une solution MVC 1 en MVC3. Tous les projets compilent.

    Lorsque je lance l'application Web, j'arrive sur la page de login qui exploite le composant asp:Login.

    Lors de la validation (après saisie du login et mot de passe), l'évènement OnLoggedIn n'est pas appelé (ni même l'évènement OnAuthenticate, ni même l'évènement OnLoggingIn) !!!!! Je ne comprends pas, c'est comme si le code cshap de ma page LogOn.aspx était ignoré. Du coup je ne passe jamais la page de navigation : quand je valide et bien je reste à nouveau sur cette page d'authentification.

    Avez-vous une idée ?

    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
    ============= LogOn.aspx ========
    protected void LoggedIn(object sender, EventArgs e)
    {
            try
            {
                User user = new UserServiceClient().GetByLogOn(LoginControl.UserName);
     
     
                if (user != null)
                {
                    // ... et le stock en Session
                    Session.Add("UserId", user.UserId);
     
                    if (user.MustChangePassword)
                        Response.Redirect("~/Security/Password");
                    else
                        Response.Redirect((string)ViewData["ReturnUrl"]);
                }
            }
            catch (FaultException ex)
            {
                string s = ex.Message;
            }
    }
     
    <asp:Content ContentPlaceHolderID="MainContent" runat="server">
    <div class="main">
     <asp:Login ID="LoginControl" runat="server" DisplayRememberMe="False" TitleText="" VisibleWhenLoggedIn="false" Font-Size="Large" TextBoxStyle-Font-Size="Large" LoginButtonType="Image" LoginButtonImageUrl="~/Content/valider.gif" OnLoggedIn="LoggedIn" FailureText="Les informations que vous avez saisies ne permettent pas de vous identifier." FailureTextStyle-Width="400" FailureTextStyle-HorizontalAlign="Justify" FailureTextStyle-VerticalAlign="Bottom" FailureTextStyle-Wrap="False" FailureTextStyle-ForeColor="0xDD0000">
    </asp:Login>
    </div>
    </asp:Content>

  2. #2
    Membre chevronné

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Par défaut
    T'as essayé de configurer l'appel à l'événement dans le code behind :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    protected void Page_Load(object sender, EventArgs e)
    {
      LoginControl.Authenticate += new AuthenticateEventHandler(LoginControl_Authenticate);
    }
     
    void LoginControl_Authenticate(object sender, AuthenticateEventArgs e)
    {
      // ici le code
    }
    ?
    Histoire de voir si ça fonctionne comme ça et peut-être que ça donnera une indication sur le problème...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 3
    Par défaut
    J'ai tenté et ça ne fonctionne malheureusement pas (pourtant la méthode Page_load est bien exécutée).

    Sur un autre forum, on m'a fournit l'explication suivante : MVC 3 ne gère pas les évènements des user control asp. L'utilisation de codebehind est une violation du design pattern MVC et qu'il n'est pas supporté.

    Vous en pensez quoi ?

    Merci pour votre réponse

  4. #4
    Membre chevronné

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Par défaut
    A priori, on peut tout à fait combiner techno MVC3 et WebForms. Par contre, je pense qu'il faut bien distinguer les 2 types de techno dans le projet : pas de mélange dans un fichier aspx.
    Pour l'instant je n'ai fait qu'un projet de test en utilisant la syntaxe razor (fichiers cshtml), et j'ai rajouté un fichier login.aspx à la racine du site avec le control <asp:Login /> : je passais bien dans les méthodes liées aux événements.
    Essaie peut-être de créer un nouveau projet et de rajouter ta page de login, histoire de voir si ça fonctionne. Si c'est le cas, faudra voir si lors de la conversion, il n'y a pas des informations essentielles dans la config qui ont "sauté" (web.config, voire global.asax).

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 3
    Par défaut
    Je suis tout à fait d'accord ; pas de mélange razor et asp dans la même vue.

    Je viens de faire le test de partir d'un projet vierge MVC3 puis de créer une page logon.aspx contenant un control <asp:Login/>. Je ne rentre pas dans les méthodes liées aux évènements.

    Peux-tu me fournir ton projet de test ?

    Merci

  6. #6
    Membre chevronné

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Par défaut
    Je n'ai pas accès à mes tests le week-end, je viens donc de télécharger Visual Web Developper 2010 Express (une version gratuite et light pour faire des sites ASP.Net). J'ai fait un projet de test MVC3 de type Application internet (histoire d'avoir des pages MVC) et j'ai ajouté ma page Logon.aspx à la racine. Elle est ultra basique :

    Partie HTML :
    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
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="LogOn.aspx.cs" Inherits="TestMVC3.WebForm1" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
     
    <body>
        <form id="form1" runat="server">
        <div>
        <asp:login runat="server" ID="login" onauthenticate="login_Authenticate"></asp:login>
            <asp:Label ID="reponse" runat="server"></asp:Label>
        </div>
        </form>
    </body>
    </html>
    Partie C# :
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.Security;
    using System.Security.Policy;
     
    namespace TestMVC3
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
     
            }
     
     
            protected void login_Authenticate(object sender, AuthenticateEventArgs e)
            {
                if (Membership.ValidateUser(login.UserName, login.Password))
                {
                    reponse.Text = "OK";
                }
                else
                {
                    reponse.Text = "KO";
                }
            }
        }
    }
    Et ça fonctionne...
    Je n'ai fait aucune autre modification du projet que l'ajout de cette page. Je ne sais pas quoi te dire

Discussions similaires

  1. [WD20] Plantage de mon programme suite migration vers Windev20
    Par remi82 dans le forum WinDev
    Réponses: 5
    Dernier message: 20/01/2015, 15h57
  2. Réponses: 2
    Dernier message: 22/07/2014, 21h23
  3. Réponses: 1
    Dernier message: 13/09/2008, 20h26
  4. Réponses: 3
    Dernier message: 20/06/2007, 18h42
  5. Pb de select suite à migration d'oracle 8i vers 10G2
    Par childeric dans le forum Oracle
    Réponses: 6
    Dernier message: 19/01/2006, 12h52

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