0

Je crée à la volée une série de contrôles de composants côté client qui sont imbriqués dans un panneau de mise à jour. La première fois que je crée les contrôles, tout fonctionne comme souhaité, cependant, quand je déclenche une mise à jour sur le panneau de mise à jour et qu'il effectue une publication partielle, les contrôles reviennent avec plusieurs erreurs javascript décrivant comment le contrôle est déjà enregistré sur la page.Commandes ASP.NET et panneaux de mise à jour

je reçois une série d'erreurs qui disent quelque chose comme: « Erreur: Sys.InvalidOperationException: Deux composants avec le même id « master_ctl40_CCB_PALETTES » ne peuvent pas être ajoutées à l'application »

Toute personne idées?

+0

Il semble que vous essayiez de créer les contrôles deux fois. Seriez-vous en mesure de publier votre code de mise à jour? Où créez-vous les contrôles? – jgallant

Répondre

0

Dans quel événement ajoutez-vous les composants au panneau de mise à jour? C'est à dire. les avez-vous placés dans l'événement de chargement de page sans vérification de publication ou les avez-vous placés dans l'événement de chargement du panneau de mise à jour? etc ...

+0

Oui, je les ajoute dans l'événement Page_Load, cependant, si je dis if (! Page.IsPostBack), les contrôles ne sont pas mis à jour ou envoyés au client après cela. –

+1

Pouvez-vous essayer d'ajouter votre contrôle dans l'événement Page_Init et supprimer le bloc de code IsPostBack s'il vous plaît. –

1

Essayez ces astuces:

  1. On Page_Load mis uxFailedControl.ID = DateTime.Now.ToString(); Il s'assurera que votre contrôle possède un identifiant unique chaque fois que vous rechargez une page (en totalité ou en partie), donc en théorie, vous ne devriez plus voir d'erreurs "id identique".
  2. Si vous affichez votre contrôle dans Modal Popup: Chaque fois que vous masquez la fenêtre contextuelle du serveur, supprimez le contrôle de son conteneur (Panneau, Page, Contrôle, etc.) Utilisez uxModalPopupPanel.Controls.Clear(); ou uxModalPopupPanel.Remove (uxFailedControl);
  3. Lorsque vous avez terminé le débogage, définissez la propriété ScriptMode de votre ScriptManager sur "Libérer". Cela évitera que les exceptions internes à AJAX ne passent dans le navigateur.
+0

La génération d'ID uniques avec 'DateTime.Now.ToString()' résout mes problèmes. –

0

On dirait que votre objet client est créé plusieurs fois.

Si vous souhaitez que vos contrôles côté client soient remplacés lors de l'actualisation du panneau de mise à jour, ils doivent hériter de Sys.UI.Control, qui prend un élément dans son constructeur. Lorsque cet élément est remplacé par le panneau de mise à jour, l'objet client sera éliminé puis recréé. Si vous utilisez actuellement ScriptComponentDescriptor côté serveur pour définir l'instance de contrôle client, vous devez passer à ScriptControlDescriptor. Par les sons, vos objets clients héritent simplement de Sys.Component, qui restera en attente jusqu'à ce qu'ils soient éliminés manuellement, ce qui explique pourquoi vous obtenez une erreur sur le fait d'avoir plus d'un composant avec le même ID. .

Je vous déconseille d'utiliser un nouvel ID à chaque publication - cela permettra de continuer à créer de nouveaux objets clients sans jamais nettoyer les anciens.

Questions connexes