Empêcher les erreurs des userscontrols de faire planter toute la page

Description

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

Codes Sources

A voir également

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.