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