Cette source permet de faire une requete sur un ascx, ceci grace à un handler.
Vous pourrez donc faire une requete de ce style : http://localhost/UC/hour.ascx et cela vous affichera le controle.
J'ai fait ceci pour pouvoir mettre à jour un UC dans une page par ajax.
Si vous utilisez dans votre UserControl des controles qui font un postback, attention a bien mettre le render entre des balises <form>, et de ne pas rajouter de controle faisant des postbacks, sinon aprés mis à jour dans votre page votre postback ne fonctionnera pas.
Dans ce cas, le postback est un coin délicat, si vous voulez utilisez cette technique avec postback, il faudra faire attention. Pour pouvoir utiliser le postback, j'ai du court-circuiter la vérification que le controle se trouve bien dans une balise form. Ceci en surchargeant la méthode VerifyRenderingInServerForm.
Ceci est un handler, vous devez donc compilez le code dans une dll, le mettre dans votre dossier bin de l'application et déclarer l'handler dans le web.config de cette facon :
<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="*.ascx" type="CSLib.Web.HTTPHandler.UserControl, CSLib.Web" validate="true"/>
...
</httpHandlers>
dans l'attribut type, le premier paramètre correspond au chemin de la classe, et le deuxieme paramètre correspond au nom de l'assembly (generalement le nom de la dll sans le .dll)
Pour des raisons de sécurité, si vous voulez avoir le rendu d'un ascx, il faut que ce UserControl implemente l'interface
public interface IUCStandAlone
{
Boolean isStandAlone
{
get;
}
}