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:
Visiblement je récupère bien les paramètres.
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(); }...
Dixite Firebug
Voici le code du ashx
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4Paramètres: _ 1379940271364 control ~/SPLIT1_Global_Form.ascx idDialogBox DialogMessage1379940271364
Si ça peut vous aider. Depuis l'ajout des UpdatePanels, je passe 2 fois dans le page_render lors du chargement du premier niveau.
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
D'avance je vous remercie de votre aide. Je continue de chercher on ne sait jamais![]()
Partager