begin process at 2008 05 16 09:46:44
1 173 261 membres
101 nouveaux aujourd'hui
13 970 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EMPÊCHER LES ERREURS DES USERSCONTROLS DE FAIRE PLANTER TOUTE LA PAGE


Information sur la source

Catégorie :Astuces Source .NET ( DotNet ) Classé sous : usercontrol, exception, erreur, empêcher, page Niveau : Initié Date de création : 26/03/2006 Date de mise à jour : 03/04/2006 22:31:28 Vu / téléchargé: 9 938 / 160

Note :
Aucune note

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note


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

  • // 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;
  • }
  • }
// 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
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

26 mars 2006 20:19:57 :
orthographe...
27 mars 2006 17:11:11 :
ZIP
29 mars 2006 15:08:23 :
ZIP (bis)
03 avril 2006 22:31:29 :
ZIP !
    Aucun commentaire pour le moment.

Ajouter un commentaire

Discussions en rapport avec ce code source

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS