Comment faire TinyMCE travail à l'intérieur d'un UpdatePanel?
Je suis en train de faire quelque chose que beaucoup de gens semblent avoir été en mesure de le faire, mais que je suis incapable de mettre en œuvre toute solution. Le De TinyMCE de contrôle fonctionne assez bien dans un asp.net forme jusqu'à ce que vous joindre à un UpdatePanel, qui rompt ensuite après la publication. J'ai essayé quelques corrections comme la méthode RegisterClientScriptBlock, mais je suis toujours infructueuses, j'ai encore perdu de la tinyMCE contrôle après la publication.
Ci-dessous est un test complet du projet (VS 2008) fourni avec un Contrôle UpdatePanel et une à l'intérieur, avec un bouton sur chaque pour générer de la publication. Également dans le projet, j'ai un EditorTest de contrôle incluent un code commenté de quelques appels, j'ai essayé, dans le cas où il donne à quiconque d'idées.
Voici quelques sources pour certaines solutions sur le MCE forum :
AJAX
UpdatePanel
Vous devez vous connecter pour publier un commentaire.
Pour exécuter la
init
à chaque fois que l'UpdatePanel
changements dont vous avez besoin pour enregistrer le script à l'aide deScriptManager
:REMARQUE: Vous ne pouvez pas utiliser
exact
mode sur votre fonction init, vous pouvez utilisertextareas
ou unclass selector
, sinon ça ne fonctionnera pas correctement.Vous devez utiliser les
Sur une publication d'un UpdatePanel l'éditeur de contenu n'est pas enregistré sur la zone de texte, parce que le comportement par défaut est uniquement pour
form.submit
, de sorte que lorsque vous soumettez tout ce qu'il va sauver le texte avant sa publication.Sur le code-behind pour obtenir la valeur que vous aurez juste besoin de l'accès
TextBox.Text
propriété.REMARQUE: Si vous êtes en utilisant le .NET Format vous aurez probablement à tomber, je ne pouvais pas le faire fonctionner, j'ai dû enlever entièrement.
Ok, le problème est de deux ordres. Stefy fourni avec une partie de la réponse, qui est, vous devez les initialiser TinyMCE sur la publication par l'enregistrement du script de démarrage comme suit:
Le deuxième problème que vous avez avec votre mise en œuvre d'un contrôle personnalisé. La conception des contrôles personnalisés est hors de portée de cette réponse. Google peut vous y aider.
Vous avez plusieurs instances de votre commande sur la page qui peut vous causer des problèmes avec le script, comme il se rendait plusieurs fois. C'est de cette façon que je l'ai modifié votre balisage pour résoudre votre problème(avis de nommage dynamique de vos fonctions de script, commandes personnalisées doit être autonome et de la mode: "exact" sur la tinyMCE.init):
mode
"exacte", il ne fonctionne pas correctement dans un UpdatePanel. Vous pouvez utilisertextareas
ou unclass selector
à la place. Et pour moi, lesave_callback
était assez buggy, au lieu de cela j'ai utiliséRegisterOnSubmitStatement
appelertinyMCE.triggerSave()
. Il fonctionne très bien pour moi.Cette solution ne fonctionne plus pour les TinyMCE 4.2.3. Au lieu de l'utilisation de tinymce.mceRemoveControl() vous devez maintenant utiliser tinymce.supprimer(). Voici une exemple de travail:
La Page
Le Code-Behind:
La manière correcte de faire tinyMCE travail dans un updatepanel:
1) Créer un gestionnaire pour l'OnClientClick de votre bouton "soumettre".
2) Exécuter tinyMCE.execCommand("mceRemoveControl", false, '<%= txtMCE.ClientID %>'); dans le gestionnaire, afin de supprimer la tinyMCE instance avant la publication.
3) Dans votre async la publication, utilisez le ScriptManager.RegisterStartupScript pour exécuter tinyMCE.execCommand("mceAddControl", true, '<%= txtMCE.ClientID %>');
Fondamentalement, tout ce que vous devez faire est d'utiliser la mceRemoveControl commande avant la async publication et d'enregistrer un script de démarrage pour exécuter le mceAddControl commande après l'async publication. Pas trop difficile.
Je n'ai suivantes:
D'abord j'ai ajouté ce code Javascript sur ma page:
Parce que je suis de la création d'un ASP.NET et à l'aide et ASP.NET Bouton dans ma page, j'ai dû ajouter ce qui suit à la Page de Chargement:
C'est une vieille question, mais après des heures de recherche et de déconner à la recherche pour la réponse, je me sens obligé de poster la solution, je suis venu avec.
Il semble que, au moins dans la mise en œuvre que j'utilise (plusieurs éditeurs à l'intérieur d'un UpdatePanel) qui tinyMCE doit être informé que le contrôle est aller loin quand l'UpdatePanel soumet, ou bien il va refuser de le charger à nouveau.
Donc, en plus du code d'Initialisation de TinyMCE (qui ne doit s'exécuter que lorsque l'ensemble du chargement de la page), vous devez le faire pour chacun de vos MCE zones de texte:
elm1 est ce que la tinyMCE élément. Le mien est un textarea résidant dans un UserControl, mais vous pouvez l'appliquer à tout élément que vous souhaitez lier/délier votre textarea.
mceAddEditor
/mceRemoveEditor
tinymce.com/forum/viewtopic.php?id=31256La mise à jour de la réponse à cette question pour ceux qui l'utilisent .NET framework 4, j'ai réussi à fixer TinyMCE d'une zone de texte à l'intérieur d'un panneau de mise à jour en insérant les suivantes:
Dans le balisage dans le <head></head> région:
Dans le balisage dans le <body></body> région:
Et enfin dans le code-behind dans l'événement Page_Load:
Vous ne savez pas si vous avez regardé ces.
http://joakimk.blogspot.com/2007/07/tinymce-inside-of-aspnet-ajax.html
et
http://codeodyssey.com/archive/2007/7/18/updatepanel-tinymce-demo-with-project-zip-file
Voici une tinymce post sur le forum sur ce
http://tinymce.moxiecode.com/punbb/viewtopic.php?id=12682
Bonne chance.
Vous devez appeler l'initialisation de la méthode de la TinyMCE chaque fois que le panneau de mise à jour est actualisé.
Pour cela, vous pouvez soit appeler cette méthode (de tinyMCE.init) à partir d'une méthode RegisterStartupScript, ou pour créer une page de chargement de la fonction javascript dans la section head de la page comme ceci:
Cette fonction sera exécutée chaque fois que le panneau de mise à jour est actualisé.
j'ai résolu ce problème
appel tiny mce après la réponse de la génération de l'appel ajax
et la page caaled par appel ajax est
peut être utile dans une telle situation.
Je di ce
Que d'initialiser l'éditeur après chaque publication asynchrone même si
Puis dans l'événement page_load
TinyMCE (ainsi que d'autres éditeurs WYSIWYG, FCKEditor, etc) souffre de publication problèmes de validation. Par défaut, toutes les ASP.Net page sur la publication a son contenu vérifié, et tout clair HTML jette la publication d'erreur de validation.
Maintenant, beaucoup de gens, y compris sur les forums vous suggérons de désactiver la publication de validation, validaterequest="false" , mais ce qui vous rend vulnérable à des attaques de script, la meilleure chose à faire est de lier une fonction asynchrone publication de l'événement qui déclenche juste avant async publication. Cette fonction JavaScript doit coder le HTML TinyMCE données affichées sur le serveur, cela va passer de la publication de validation et vous serez OK.
Je crois TinyMCE et d'autres éditeurs correctement ce faire sur les publications, mais pas async publications d'où la question, en fait, si vous regardez TinyMCE la source, vous pouvez probablement trouver leur fonction qui fait cela et il suffit d'ajouter l'événement de liaison.
Espère que cette aide