2009-12-09 9 views
0

Je cherche un moyen d'ajouter un contrôle éditeur (à partir de l'ASP.NET AJAX Control Toolkit) à chaque élément d'un répéteur. Cela fonctionne bien si je l'inclue simplement dans le ItemTemplate du répéteur, mais mon problème est que le balisage qu'il produit est énorme, ce qui ralentit considérablement la page (même avec la compression activée). Je n'ai pas eu de chance d'ajouter le contrôle à l'intérieur de l'élément répéteur en utilisant un panneau de mise à jour - Je pense que c'est probablement la méthode préférée, mais ajouter dynamiquement un contrôle dans un panneau de mise à jour n'est pas quelque chose J'ai réussi à le faire, et il ne semble pas y avoir de bons exemples de ce que je peux trouver.Ajouter un contrôle éditeur dynamiquement à l'intérieur d'un répéteur en utilisant AJAX

L'autre alternative que j'ai considéré était d'utiliser PageMethods pour rendre le contrôle et renvoyer le HTML à la page pour que le javascript le mette à l'endroit approprié, puis le traiter, mais il ne me laisse pas rendre le contrôle - Je reçois une InvalidOperationException de "Page ne peut pas être null. Veuillez vous assurer que cette opération est effectuée dans le contexte d'une requête ASP.NET.". Ma conjecture est que tout le javascript généré fait en sorte que je ne peux pas rendre un contrôle de l'éditeur à la volée.

Pouvez-vous me diriger dans la bonne direction pour accomplir cela?

Merci

EDIT: Une autre alternative, si elle est possible, serait de mettre un contrôle de l'éditeur normale dans le balisage de la page, puis déplacez-le à l'intérieur du répéteur, au besoin, en utilisant javascript. Je peux le faire avec les commandes normales, mais quand je le fais avec un éditeur, il ne se comporte pas bien - la boîte de texte apparaît, mais ne me laisse pas cliquer dedans. Si vous avez des idées à ce sujet, j'apprécierais aussi cela. Voici le code pour cela:

<span id="spanHiddenEditor" style="display: block;"> 
    <cc1:Editor ID="ed1" runat="server" Height="200" Width="400" /> 
</span> 
<script type="text/javascript"> 
    function createTextBox(idx) { 
     var span = $get("span1_" + idx); // this gets me the target location 
     var hiddenEditorSpan = $get("spanHiddenEditor") 
     var editorHtml = hiddenEditorSpan.innerHTML; 
     hiddenEditorSpan.innerHTML = ""; 
     span.innerHTML = editorHtml; 
    } 
</script> 
+0

Je n'ai jamais été capable de faire ce travail, donc j'ai fait une solution pour afficher mon contrôle d'éditeur dans un pseudo-popup, de sorte qu'il ne soit en une seule fois sur la page, en dehors du répéteur. Je triche et place les informations de l'élément répéteur dans un champ caché de sorte que lorsque la page est soumise, je suis capable de trouver quel élément du répéteur était responsable de la publication. Pas une solution parfaite, mais cela fonctionne. Je n'ai pas les points SO pour fermer cette question, donc si quelqu'un veut la fermer, n'hésitez pas. –

Répondre

0

identifier l'emplacement dans le répéteur avec une classe puis utilisez jquery pour Inser le code html page prêt

$(function() { 
     $(".myclass").Append("<htmlz>"); 
}); 

Ensuite, si vous avez besoin d'identifier chaque zone de texte, vous pouvez faites-le en utilisant l'ID du conteneur parent, par exemple. Je suis un total de jquery newb donc aucun son ne fonctionnera probablement, mais je crois que l'idée est bonne!

+0

Cela ne semble pas du tout répondre à mes besoins - je cherche comment mettre un contrôle éditeur sur un UpdatePanel à l'intérieur d'un répéteur. Je n'utilise pas jQuery, et je ne vois pas comment CSS est applicable ici. Est-ce que cela aurait pu être fait pour un poste différent? –

+0

Le est le contrôle de l'éditeur, vous voulez télécharger le code de contrôle une fois, et l'insérer dans de nombreux endroits (dans cet exemple, dans tous les div avec la classe myclass), puis pour accéder aux contrôles indivuellement vous devez utiliser le le div id parent. ce n'était pas destiné à un autre poste! C'est ce que vous semblez faire dans votre 3ème paragraphe, mais je ne suis pas familier avec les méthodes de page. –

+0

Je pense que je vois de quoi vous parlez maintenant - désolé je ne l'ai pas vu au début.Mais si je comprends bien, votre code jQuery déplacerait le HTML du contrôle d'origine dans un nouvel endroit. J'ai déjà essayé ceci en utilisant javascript régulier (voir la modification au bas de mon message), sans aucune chance - mon estimation est due à la complexité du contrôle. Je m'attendais à ce que l'utilisation de la syntaxe jQuery ait le même résultat final. Des contrôles simples comme les TextBox se déplacent très bien, mais quelque chose à propos de l'éditeur rend le déplacement inopportun. –