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 :

ashx LoadUserControl et erreur: demande non disponible dans ce contexte


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Avril 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 213
    Par défaut ashx LoadUserControl et erreur: demande non disponible dans ce contexte
    Bonjour,

    J'ai une application qui génère un page aspx dont les user controls sont chargés à la volés et en cascades.

    Pour cela, je me suis basé sur un HandllerWeb pour charger ascx. Le chargement se passait bien.

    Mais depuis peu, pour avancer, j'ai remplacer les "div" par des UpdatePanel. Et là mon soucis c'est qu'au delà du premier palier dans la cascade de chargement d'ascxs, j'ai une exception "demande non disponible dans ce contexte" lors de l'ajout du panel à la page (la ligne en rouge).

    Voici le code JS appelant:
    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
     
     jQuery.ajax({
                type: 'GET',
                url: '../Pages/UserControlLoader.ashx?control=' + encodeURI(data["url"]) + param + "&idDialogBox=" + idDialogBox,
                cache: false,
                context: document.body,
                async: false,
                dataType: "html",
                success: function (View) {
                    if ($handdle.length == 0) { //Si la zone ciblée n'existe pas ou que l'on ne la pas nommée on envoie le code dans une message box
                        var Dialog = new MessageBox();
                        var modal = true;
                        Dialog.intDialogBox(idDialogBox, modal);
     
                       Dialog.MsgDialogBox(strFrameName, View);
    }
                    else {
                        $handdle.empty();
                        $handdle.append(View);
                    }
                    Ready();
                }...
    Visiblement je récupère bien les paramètres.
    Dixite Firebug
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Paramètres:
    _	1379940271364
    control	~/SPLIT1_Global_Form.ascx
    idDialogBox	DialogMessage1379940271364
    Voici le code du ashx
    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 Class UserControlLoader
        Implements System.Web.IHttpHandler, System.Web.SessionState.IRequiresSessionState
    
        Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
    
            'context.Response.ContentType = "text/html"
    
            Try
                Dim ctrl As String = context.Request("control")
    
                If (Not String.IsNullOrEmpty(ctrl)) Then
                   context.Response.Write(LoadUserControl(ctrl))
                Else
                    ctrl = ""
                End If
    
    
            Catch ex As Exception
    
            End Try
    
    Protected Shared Function LoadUserControl(ByVal user_control As String) As String
    
            Dim retour As String = String.Empty
    
            'Verification de l'existance du userControl
            Dim existe As Boolean = System.IO.File.Exists(HttpContext.Current.Server.MapPath(user_control))
            If Not existe Then Return retour
    
            'Creation de la page virtuelle
            Using Page As New Page
                Page.ProcessRequest(HttpContext.Current)
    
                'si la chaine est un chemin relatif du type "../toto/tata" on vire les .. qu'on rempalce par ~
                If (user_control.StartsWith("../")) Then user_control = (New Regex("^[\.]{2}")).Replace(user_control, "~")
    
                Dim uc As UserControl = Page.LoadControl(user_control)
    
                'Dim panel As Panel = New Panel()
                Dim panel As Panel = New Panel()
                panel.Controls.Add(uc)
                Page.Controls.Add(panel)
    
                Using writer As New StringWriter()
                    HttpContext.Current.Server.Execute(Page, writer, True)
                    retour = writer.ToString()
                End Using
    
            End Using
    
            Return retour
    
        End Function
    Si ça peut vous aider. Depuis l'ajout des UpdatePanels, je passe 2 fois dans le page_render lors du chargement du premier niveau.

    D'avance je vous remercie de votre aide. Je continue de chercher on ne sait jamais

  2. #2
    Membre très actif
    Inscrit en
    Avril 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 213
    Par défaut
    J'ai franchit un niveau supplémentaire. J'avais des <ajaxToolkit:ToolkitScriptManager> dans mes ascx du niveau1. Maintenant, je bloque au niveau 2. Heureusement pour l’instant j'ai que 3 niveaux .

    Edit:
    J'ai regardé, je n'ai plus de scriptManager inclue dans mes "sous ascx". Par contre des fonctions telles que Page.ClientScript.RegisterClientScriptInclude, Page.Request.Form sont utilisées, j'ai quelques UpdatePanel, cela peut-il être lié ?

    En gros quels pourraient-être les éléments aspx à proscrire dans un scriptManager et qui entraîneraient cette erreur. Sachant que si je les inclus dans des divs à la main ça marche (mais je n'ai pas la gestion des post-back)

    D'avance merci de votre aide.

  3. #3
    Membre très actif
    Inscrit en
    Avril 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 213
    Par défaut
    J'ai trouvé mon problème. Il est résolu cela venait du fait qu'il y avait un bout de code qui accédait à Page.Request().

    Il suffisait de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    context.Response.ContentType = "text/html"
    pour que ça re-fonctionne.

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

Discussions similaires

  1. erreur GlassFish ressource demandée non disponible
    Par Klemsy78 dans le forum Glassfish et Payara
    Réponses: 1
    Dernier message: 01/12/2009, 00h06
  2. Réponses: 3
    Dernier message: 07/06/2006, 13h11
  3. Réponses: 2
    Dernier message: 01/06/2006, 14h54
  4. [2005] Composants de Delphi 7 non disponibles dans 2005
    Par dacid dans le forum Bases de données
    Réponses: 5
    Dernier message: 04/08/2005, 17h18
  5. Imprimante non disponible dans QuickReport 3.0
    Par Writer dans le forum EDI
    Réponses: 1
    Dernier message: 23/05/2005, 10h30

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