2011-10-03 1 views
0

J'essaie de créer un contrôle de serveur personnalisé en C# en utilisant VS2008. J'utilise ce contrôle personnalisé qui nécessite effectivement de modifier le fichier web.config afin d'ajouter un HttpHandler lorsque ce contrôle est ajouté à la page du client.Comment modifier web.config automatiquement lors de l'utilisation de Custom Server Control?

Ma question est assez simple:

Ce qui doit être ajouté à mon code de contrôle personnalisé de sorte qu'il enregistre les informations HttpHandler requises dans le web.config? Certains contrôles natifs le font déjà. Par exemple, le AJAX Toolkit va modifier le fichier web.config. Comment puis-je faire quelque chose de similaire avec mon contrôle?

Répondre

1

Si vous avez un élément dans la boîte à outils de Visual Studio, vous pouvez effectuer une telle action lorsque le développeur fait glisser et dépose le contrôle sur la page Web. Vous devez décorer votre contrôle avec System.ComponentModel.DesignerAttribute pour le renvoyer à une sous-classe (que vous créez) de System.Web.UI.Design.ControlDesigner. Dans cette classe, vous pouvez remplacer Initialize et là, vous pouvez mettre la main sur la config par System.Web.UI.Design.IWebApplication quelque chose comme ceci:

var service = this.GetService(typeof(System.Web.UI.Design.IWebApplication)) as IWebApplication; 
if (service != null) 
{ 
    var configuration = service.OpenWebConfiguration(false); 
    if (configuration != null) 
    { 
     var section = configuration.GetSection("system.web/httpHandlers") as HttpHandlersSection; 
     if (section != null) 
     { 
      var httpHandlerAction = new HttpHandlerAction("MyAwesomeHandler.axd", typeof(MyAwesomeHandler).AssemblyQualifiedName, "GET,HEAD", false); 
      section.Handlers.Add(httpHandlerAction);     
      configuration.Save(); 
     } 
     else 
     { 
      // no system.web/httpHandlers section found... deal with it 
     } 
    } 
    else 
    { 
     // no web config found... 
    } 
} 
else 
{ 
    // Couldn't get IWebApplication service 
} 
+0

i VHA ECRIT ci-dessous le code, mais il n'a pas work.Please chek si quelque chose de mal im faire si (service! = null) { var configuration = service.OpenWebConfiguration (false); if (configuration! = Null) { var section = configuration.GetSection ("system.web/httpModules") en tant que HttpHandlersSection; HttpModuleAction a = new HttpModuleAction ("Outils", "CC, Outils"); section.add (a); –

+0

Une fois que vous avez ajouté la section, vous devrez faire un 'configuration.Save()' –

+0

J'ai ajouté la section configuration.Save(), mais encore il ne fonctionne pas, S'il vous plaît, aidez-moi. –