J'ai un contrôle d'interface utilisateur personnalisé qui a une classe JavaScript écrite autour de l'infrastructure AJAX.NET. Il hérite de Sys.UI.Control. Le contrôle lui-même est un UserControl. Dans la méthode de rendu, j'emballe le contrôle dans un span et donne l'ID de la travée le ClientID du contrôle de l'utilisateur. De cette façon, je peux le faire plus tard:Sys.Application.add_init Non appelé UpdatePanel Mise à jour
var control = $find('<%= ServerControlID.ClientID %>');
Cela me permet d'obtenir l'objet client qui représente le contrôle de l'interface utilisateur.
je crée le contrôle en Javascript en faisant cela (aussi dans la méthode render)
writer.Write(@"<script type='text/javascript'>
Sys.Application.add_init(function() {
debugger;
$create(General.Filters.AccountGroupFilter,
" + GetProperties() + @",
null,
null,
$get('" + this.ClientID + @"'));
});
</script>");
Cela crée l'objet. C'est fait à l'intérieur de l'événement init du cycle de vie.
Le problème est que ce contrôle est enveloppé dans un UpdatePanel par une page consommatrice/contrôle. Lorsqu'un autre contrôle initie une mise à jour, toutes les interfaces utilisateur des contrôles sont redessinées, MAIS l'événement init ne se déclenche JAMAIS à nouveau.
Qu'advient-il alors est quand je fais ceci:
var control = $find('<%= ServerControlID.ClientID %>');
if(control != null)
control.doSomething();
Rien ne se passe parce que le $ find ne trouve pas le contrôle après l'appel AJAX. Je sais que je ne fais pas cela correctement. Où vais-je mal? L'article MSDN pour ce truc me pointe dans les cercles!
EDIT: Je Figured inclure la méthode Render que je fais dans la partie de UserControl.cs
protected override void Render(HtmlTextWriter writer)
{
writer.Write("<span id=\"" + this.ClientID + "\" >");
writer.Write(@"<script type='text/javascript'>
Sys.Application.add_init(function() {
$create(TradePMR.OMS.Resources.UserControls.General.Filters.AccountGroupFilter,
" + GetProperties() + @",
null,
null,
$get('" + this.ClientID + @"'));
});
</script>");
base.Render(writer);
writer.WriteEndTag("span");
}