Ce code fait la même chose (en mieux :p) que cette source de jesusonline :
http://www.aspfr.com/codes/EVITER-ERREURS-USERCONTROLS-ARRETENT-FONCTIONNEMENT-PAGE_36510.aspx, bien que l'approche soit radicalement différente.
Tout tient en fait dans une des méthodes de la classe Page : ProcessRequest(HttpContext context)
J'ai mis dans le Zip un exemple : une page avec 3 UserControls et un bouton pour faire lancer une exception dans un des UserControls.
Source / Exemple :
// J'ai une liste des UsersControls à charger qui se trouve dans une variable de sessions : Session["Ucs"]
// On va utiliser cette liste pour rechercher quel est l'UC qui cause l'erreur
// Le contenu de la méthode ProcessRequest(HttpContext context) :
public override void ProcessRequest(HttpContext context)
{
// dans le ProcessRequest, on attrappe toutes les exceptions
try
{
base.ProcessRequest(context);
}
catch (Exception ex)
{
// on recheches dans la StackTrace de l'exception quel est l'usercontrol qui apparait
string UcToRemove = "";
foreach (string item in (System.Collections.Generic.List<string>)Session["Ucs"])
{
if (ex.InnerException.StackTrace.Contains(item.Replace(".ascx","")))
{
// si on a trouvé l'UserControl qui cause l'erreur, on note son nom
UcToRemove = item;
}
}
if (UcToRemove != "")
{
// ensuite on l'enlève de la liste des UC à charger
// donc, plus aucun bug :D
((System.Collections.Generic.List<string>)Session["Ucs"]).Remove(UcToRemove);
// on redirige la page sur elle même pour la recharger entièrement
// mais sans l'UC qui ne marche pas :)
System.Web.HttpContext.Current.Response.Redirect(System.Web.HttpContext.Current.Request.Url.ToString());
}
else
{
throw;
}
}
Conclusion :
Je n'ai pas encore trouvé de moyen de contourner cette méthode, mais il doit sans doute y en avoir...
Si il y en a, n'hésitez pas, les commentaires sont là pour ça :p
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.