Dans le cas des sites sharepoints supportant des webparts en Ajax, j'avais l'habitude d'ajouter le ScriptManager à la master page.
<form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> .... </form>
Le problème est que si vous développez une WebPart utilisant Ajax, il faut que la master page ait le ScriptManager pour fonctionner correctement. Chose que je ne peux pas garantir lorsque je livre une webpart.
Comme c'est la Webpart qui a besoin du script Manager, c'est elle qui doit avoir la responsabilité d'ajouter le ScriptManager sur la page.
Voici comment le faire simplement en C# :
protected override void OnInit(EventArgs e) { if (Page != null & ScriptManager.GetCurrent(Page) == null) { Page.Form.Controls.AddAt(0, new ScriptManager()); } base.OnInit(e); }
Les éléments importants dans ce bout de code sont :
- La surcharge de "OnInit", qui nous assure d'exécuter le code au bon moment dans le cycle de vie du contrôle.
- La vérification de la présence sur "ScriptManager" pour éviter de l'ajouter s'il est déja présent sur la page.
- L'ajout du script manager comme premier contrôle pour "Page.Form.Controls" (et non Page.Controls)