2010-04-29 2 views
0

Je voudrais définir le déclencheur d'un UpdatePanel sur un contrôle utilisateur en dehors du UpdatePanel sur la même page. Le contrôle utilisateur est ajouté au moment de la conception, pas au moment de l'exécution.
Si je déclare le déclencheur de manière statique, j'obtiens une erreur "Impossible de trouver un contrôle avec ID 'xx' pour le déclencheur dans UpdatePanel". J'ai essayé d'ajouter le déclencheur à l'exécution dans Page_Init ou Page_Load, mais il échoue avec le contrôle utilisateur étant null, bien que ViewState soit activé. Quelqu'un a une idée sur la façon de résoudre ce problème?Pourquoi le contrôle de mon utilisateur n'est-il pas instancié sur une publication?

Voici le code du contrôle de l'utilisateur:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ComponentDropDownControl.ascx.cs" Inherits="ComponentDropDownControl" EnableViewState="true" %> 
<asp:DropDownList ID="ComponentDropDown" runat="server" DataSourceID="ComponentFile" 
DataTextField="name" DataValueField="name" OnSelectedIndexChanged="ComponentDropDown_SelectedIndexChanged" AutoPostBack="True" EnableTheming="True"> 
</asp:DropDownList><asp:XmlDataSource ID="ComponentFile" runat="server" DataFile="~/App_Data/Components.xml" XPath="//component"></asp:XmlDataSource> 

Et là, il est dans la page ASPX:

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="create.aspx.cs" Inherits="create" Title="Create task" %> 

<%@ Register Src="ComponentDropDownControl.ascx" TagName="ComponentDropDownControl" 
TagPrefix="uc1" %> 
... 
<uc1:ComponentDropDownControl ID="CustomComponentDropDown" runat="server" EnableViewState="true" /> 

Dans la fonction Page_Load de la page ASPX, les lignes suivantes fonctionnent à première fois, mais échoue sur le premier PostBack (ligne 2, CustomComponentDropDown est null).

AsyncPostBackTrigger trigger = new AsyncPostBackTrigger(); 
trigger.ControlID = CustomComponentDropDown.UniqueID.ToString(); 
UpdatePanel1.Triggers.Add(trigger); 

EDIT: contrôle utilisateur n'est pas instancié, car il est mis en mémoire cache. En fait, il semble impossible d'avoir un contrôle utilisateur à la fois en cache et capable de gérer les événements. Je dois manquer quelque chose parce que cela me semble un comportement plutôt merdique.
Si quelqu'un sait ce que je fais mal, s'il vous plaît dire.

Répondre

0

Dans quel scénario souhaitez-vous gérer les événements et mettre le contrôle en cache? La seule raison pour laquelle je vois gérer des événements est soit de changer l'état interne, soit de changer l'état d'affichage. Dans les deux cas, la mise en cache supprimera cette possibilité.

+0

contrôle utilisateur contient un grand menu déroulant (5K éléments) qui ne change pas, d'où la mise en cache. Mais lorsque l'utilisateur sélectionne un élément, cela doit déclencher des requêtes pour mettre à jour d'autres champs (ceux du UpdatePanel mentionné). Est-ce faux? – Antoine

0

Avez-vous enregistré le contrôle en tant que contrôle de publication asynchrone?

ScriptManager1.RegisterAsyncPostBackControl (CustomComponentDropDown);

Aussi, ne devrait pas

trigger.ControlID = CustomComponentDropDown.UniqueID.ToString(); 

être simplement

trigger.ControlID = CustomComponentDropDown.ID; 
+0

Cela ne ramène pas le CustomComponentDropDown, il est toujours null lorsque sur le Load Load du premier PostBack. – Antoine

Questions connexes