C'est assez simple. Tout d'abord tu crées ton ASCX et tu le places dans un dossier de l'application, par convention dnn dans desktopModules/Tonmodule/...
Ensuite tu édites la définition du module via Host > Modules > Edit ton module > et en bas, ajouter un nouveau contrôle. Pour notre exemple, j'ai mis le controle editReport.ascx en mode View, avec la clef EditReport. (Exemple tiré d'Aricie.CrystalReportViewer).
Tu ajoutes un LinkButon ou nimporte quel contrôle serveur, puis tu captes un evenement émanant de lui. Pour l'exemple, l'évenement capté est regroupé dans un ItemTemplate car j'affiche une liste d'objets (/.Net 1), et le nom du contrôle détermine l'action à réaliser. Dans VisualStudio, double cliquer sur ton contrôle ajouté en mode design ajoutera automatiquement l'évènement courant pour le contrôle, ainsi, un linkButon se vera attribuer une commande "Handles Buton.Click".
[CODE]
Private Sub grdAricie_CrystalReports_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles grdAricie_CrystalReports.ItemCommand
Select Case e.CommandName
Case "cmdView"
Try
Response.Redirect(NavigateURL(TabId, "EditMyReport", "itemId=" & ItemId))
Catch exc As Exception 'Module failed to load
ProcessModuleLoadException(Me, exc)
Response.Redirect(NavigateURL(TabId, "UnauthorizedAccess"))
End Try
Case Else
[ ... ]
End Select
End Sub
[/CODE]
Avec ça, on ne change pas de page, on change simplement de contrôle et un PostBack complet a lieu (Sauf si on utilise Ajax); au passage je lui passe rapidement un ItemID qui va permettre au contrôle autonome suivant de déduire ses instructions.
La clef unique d'un contrôle à l'échelle d'un module permet de construire rapidement son URL, en lui passant un TabId et un moduleID. Mais tu peux également vouloir naviguer en appelant directement une page, exemple avec un hyperlien (Ici j'affiche le rapport sur une page ASPX, l'url du lien cliquable est construite au pageLoad précédent le Click)
.NavigateUrl = ResolveUrl(TemplateSourceDirectory & "/ReportViewer.aspx?itemId=" & objAricie.CrystalReport.ItemId)
Le même hyperlien qui fait "changer de contrôle" :
.NavigateUrl = ResolveUrl(NavigateURL(TabId, "EditMyReport", "itemId=" & ItemId)) (à vérifier je fais ça à la main mais cela devrait fonctionner)
Tu peux aussi retrouver d'autres exemples dans les modules Core car il y a plusieurs façons de faire ça.
seb