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 :

Différence comportement Cassini/IIS


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Par défaut Différence comportement Cassini/IIS
    Bonjour,

    J'ai un petit soucis avec un site Web que je développe : il ne se comporte pas de la même façon en local sur mon poste avec Visual Studio (serveur Web Cassini si je me trompe pas) et sur le serveur de recette (serveur Web IIS).

    Dans la page qui pose problème, j'utilise des composants de ComponentArt (treeview, menu contextuel & callback).

    Avec Cassini :
    * Il fait une première fois le PageLoad
    * Il exécute la méthode EffectuerAction_Callback et met des infos en Session
    * Il exécute une seconde fois le PageLoad (et en fonction des informations mises en Session dans la méthode en CallBack, il y a une redirection vers une autre page)

    Avec IIS :
    * Il fait une première fois le PageLoad
    * Il fait une seconde fois le PageLoad
    * Il exécute la méthode EffectuerAction_Callback et met des infos en Session

    Après le callback, je souhaite que la page soit rechargée.

    Voici quelques extraits de mon code :

    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
     
    <%@ Page Language="C#" AutoEventWireup="False" MasterPageFile="~/LocalMasterPage.master"
        CodeBehind="Structures.aspx.cs" Inherits="Sncf.IHMSumatra.Web.Structures" %>
     
    <%@ Register Assembly="ComponentArt.Web.UI" Namespace="ComponentArt.Web.UI" TagPrefix="CA" %>
    <%@ OutputCache Location="None" %>
    <asp:Content ID="ContentScript" ContentPlaceHolderID="ContentPlaceHolderScriptZone"
        runat="server">
     
        <script type="text/javascript">
     
        function t1_onContextMenu(sender, eventArgs)
        {
            /* On met en évidence le noeud sur lequel on a cliqué */
            eventArgs.get_node().select();
            /* on recupere le niveau du noeud pour afficher le bon menu */
            switch (eventArgs.get_node().get_id().split('_')[0])
          {
            case '0': /* la racine */
              ex_menu1.showContextMenuAtEvent(eventArgs.get_event(), eventArgs.get_node());
              break;
     
            default:
              ex_menu2.showContextMenuAtEvent(eventArgs.get_event(), eventArgs.get_node());
              break;
          }
        }
     
        function Menu_onItemSelect(sender, eventArgs)
        {
            /* Correspond à l'action du menu contextuel */
            var menuItem = eventArgs.get_item();
            /* Correspond au noeud sur lequel l'action est invoquée */
            var contextDataNode = menuItem.get_parentMenu().get_contextData();
            var value = contextDataNode.get_id().split('_');
            var niveau = value[0];
            var code = '';
            if (value.length > 1)
                code = value[1];
            CallBackEffectuerAction.Callback(menuItem.get_text(), niveau, code);
     
          return true;
        }
        </script>
     
    </asp:Content>
     
    <asp:Content ID="ContentMain" ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
     
        <CA:Menu ID="ex_menu1" Orientation="Vertical" EnableViewState="false"
            SiteMapXmlFile="~/Menu/ex_menu1.xml" ContextMenu="Custom" AutoPostBackOnSelect="true"
            runat="server">
            <ClientEvents>
                <ItemSelect EventHandler="Menu_onItemSelect" />
            </ClientEvents>
        </CA:Menu>
     
        <CA:Menu ID="ex_menu2" Orientation="Vertical" EnableViewState="false"
            SiteMapXmlFile="~/Menu/ex_menu2.xml" ContextMenu="Custom"
            AutoPostBackOnSelect="true" runat="server" >
            <ClientEvents>
                <ItemSelect EventHandler="Menu_onItemSelect" />
            </ClientEvents>
        </CA:Menu>
     
    	<asp:UpdatePanel ID="upArbre" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <CA:TreeView ID="t1" DragAndDropEnabled="false" NodeEditingEnabled="false" KeyboardEnabled="false"
                        MultipleSelectEnabled="false" CollapseDuration="0" CollapseSlide="None" CollapseImageUrl="~/Dev/img/icones/ouvert.gif"
                        ExpandImageUrl="~/Dev/img/icones/ferme.gif" ExpandDuration="0" ExpandSlide="None"
                        runat="server" Style="cursor: default;" LoadingFeedbackText="Chargement..." EnableViewState="false"
                        ExpandNodeOnSelect="false" CollapseNodeOnSelect="false" PreloadCurrentPath="false"
                        PreRenderAllLevels="false">
                    </CA:TreeView>
                </ContentTemplate>
        </asp:UpdatePanel>
     
        <CA:CallBack ID="CallBackEffectuerAction" PostState="true" runat="server" OnCallback="EffectuerAction_Callback" />
    </asp:Content>
    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
     
    public partial class Structures
        {
            #region Chargement
            private void Page_Load(object sender, EventArgs e)
            {
                if (Session[INFO_ACTION] != null)
                    {
                        string[] param = ((string)_session[INFO_ACTION]).Split('_');
                        EffectuerAction(param[0], param[1], param[2]);
                    }
                    else
                    {
                        // Sinon on initialise l'écran
                        if (!IsPostBack)
                        {
                            InitialiserEcran();
                            InitialiserStyleArbre();
                            AssocierMenuContextuel();
                            ConstruirePremierNiveau();
                        }
                    }
            }
     
            private void AssocierMenuContextuel()
            {
                // Sur le clic droit, on associe le bon menu en fonction de l'utilisateur
                t1.ClientEvents.ContextMenu =
                    new ClientEvent("t1_onContextMenu");
            }
            #endregion
     
            #region Méthodes de Callback
            protected void EffectuerAction_Callback(object sender, ComponentArt.Web.UI.CallBackEventArgs e)
            {
                string param1 = e.Parameters[0];
                string param2 = e.Parameters[1];
                string param3 = e.Parameters[2];
     
                // On met en session l'action à effectuer, le postback va la lancer.
                _session[INFO_ACTION] = param1 + "_" + param2 + "_" + param3;            
            }
            #endregion
     
            #region Méthodes privées
            private void EffectuerAction(string param1, string param2, string param3)
            {
                // Pour s'assurer qu'on ne fait l'action qu'une fois
                _session[INFO_ACTION] = null;
                // En fonction des params, on redirige vers le bon écran
                // etc ...
            }
            #endregion
        }
    Ma question : est-il possible, après l'appel d'une méthode en CallBack de forcer un PostBack? Si non, y'a-t-il une façon pour contourner le problème?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Par défaut
    Bonjour,

    pour infos, j'ai résolu/contourné le problème en supprimant l'appel à la méthode en Callback dans le javascript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CallBackEffectuerAction.Callback(menuItem.get_text(), niveau, code);
    et je fais un postback directement depuis le javascript en passant les bons params :
    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
     
    function Menu_onItemSelect(sender, eventArgs)
        {
            /* Correspond à l'action du menu contextuel */
            var menuItem = eventArgs.get_item();
            /* Correspond au noeud sur lequel l'action est invoquée */
            var contextDataNode = menuItem.get_parentMenu().get_contextData();
            var value = contextDataNode.get_id().split('_');
            var niveau = value[0];
            var code = '';
            if (value.length > 1)
                code = value[1];
            /* On effectue un postback pour effectuer l'action */
            __doPostBack('__Page','ACTION_MENU#' + menuItem.get_text() + '#' + niveau + '#' + code)
     
            return true;
        }
    Le pageLoad s'effectue 2 fois : la première fois je récupère les params et je les mets en session.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    string actionAEffectuer = Request["__EVENTARGUMENT"];
                    bool bContinue = true;
     
                    // Si on est dans le cas d'un PostBack suite à une action du menu contextuel, on met les infos en session
                    if (!string.IsNullOrEmpty(actionAEffectuer))
                    {
                        string[] param = actionAEffectuer.Split('#');
                        if (param[0] == "ACTION_MENU")
                        {
                            bContinue = false;
                            _session[INFO_ACTION] = param[1] + "_" + param[2] + "_" + param[3];
                        }
                    }
    Et au second passage j'ai maintenant le même comportement qu'avec Cassini et mon action est bien traitée.

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

Discussions similaires

  1. Cassini, IIS et IIS Express avec Visual Studio 2013
    Par longbeach dans le forum Visual Studio
    Réponses: 0
    Dernier message: 06/01/2015, 15h21
  2. [EasyPHP] Différence comportement démarrage Apache par EasyPHP ou par ligne de commande
    Par SONY30 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 19/10/2010, 11h48
  3. [const]Différence comportement C/C++
    Par jldgbu dans le forum C++
    Réponses: 18
    Dernier message: 02/07/2010, 14h23
  4. Passer de Cassini à IIS
    Par micka132 dans le forum Silverlight
    Réponses: 8
    Dernier message: 02/06/2010, 10h13
  5. Différence comportement entre product et RCP
    Par DaveShot dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 16/03/2010, 09h03

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