UpdatePanel - TinyMCE demo med nedladdningsbar zip-fil

TinyMCE är en skön HTML-Editor som har blivit väldigt populär. Den är oftast väldigt enkel att använda och har många konfigureringsmöjligheter.

Men att använda den tillsammans med Ajax och partial update är verkligen ingen lätt match. Jag lyckades tidigare i år, efter stor möda, men det var nog mest tur.

Skrev om det i bloggen, men den postningen blev inte så fullständig eller bra. Det var mest lite egna minnesanteckningar som jag fick till där. Jocke var inne och kollade på beskrivningen men fick inte till det. Så nu tänkte jag visa precis hur man kan göra med ett uppdaterad och fullständig kod.

Problemen

Problem 1. TinyMCE gör om textboxar till en Iframe, som My Portal Project förklarar. Detta leder till att det är svårt att ta emot värden (speciellt i Firefox). Waqas_badas visar hur man kan komma runt detta genom ett javascript på submit-knappen.

Problem 2. Vid Ajax-anrop ritas inte editorn upp igen. Här kan man anropa mceAddControl-kommandot, men det gäller att resetta id-räknaren innan man gör det, här är en som kommit på hur man gör.

Kodexempel

Nu tänkte jag låta koden förklara resten. Missa inte att ladda hem zip-filen längst ner som innehåller ett färdigt project som fungerar i IE7, FF2 och Opera.

Default.aspx

<%@ Page Language="C#" ValidateRequest="false" Trace="false" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>MS Ajax UpdatePanel - TinyMCE</title>
<script type="text/javascript">
function SaveMyPreciousValues()
{
tinyMCE.triggerSave(false,true);
TextBox1 = document.getElementById('TextBox1');
alert('Check value when posting: '+ TextBox1.value)
}
</script>
</head>
<body>

<form id="form1" runat="server">
<asp:ScriptManager ID="sm" EnablePartialRendering="true" runat="server">
</asp:ScriptManager>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<p>
<asp:Label ID="Label1" runat="server" Text="Welcome to the MS Ajax UpdatePanel - TinyMCE Demo, Enjoy!"></asp:Label>
</p>
<asp:TextBox ID="TextBox1" Rows="10" Columns="50" TextMode="MultiLine" EnableViewState="false" Text="Write something here..." runat="server"></asp:TextBox>

<p>
<asp:Button ID="Button1" runat="server" OnClick="Button1_OnClick" OnClientClick="SaveMyPreciousValues();" Text="Hit me" />
</p>
</ContentTemplate>
</asp:UpdatePanel>

</form>
</body>
</html>

Default.cs.aspx

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
LoadTinyMCE();
}

private void LoadTinyMCE()
{

//Load tinyMCE
HtmlGenericControl Include = new HtmlGenericControl("script");
Include.Attributes.Add("type", "text/javascript");
Include.Attributes.Add("src", "js/tiny_mce/tiny_mce.js");
this.Page.Header.Controls.Add(Include);


//Config MCE
HtmlGenericControl Include2 = new HtmlGenericControl("script");
Include2.Attributes.Add("type", "text/javascript");
Include2.InnerHtml = "tinyMCE.init({mode : 'textareas' ,language : 'sv',entity_encoding : 'raw'});";
this.Page.Header.Controls.Add(Include2);

}

protected void Button1_OnClick(object sender, EventArgs e)
{

//Get the contect of the TextBox
string inputText = Request.Form["TextBox1"];

//Print all Form-values when testing
/*for (int i = 0; i<Request.Form.Count;i++ )
{
string itemName = Request.Form.AllKeys[i];
string itemValue = Request.Form.GetValues(i)[0];
Label1.Text = Label1.Text + "<br />" + itemName + ":" + itemValue;
}*/

Label1.Text = "Content posted from TextBox1: " + inputText;

//Register some javascript to redraw the editor.
//Very important to reset the id-counter to "0", or else strange things will happen..
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "init", "tinyMCE.idCounter=0;tinyMCE.execCommand('mceAddControl', false, 'TextBox1');", true);
}
}

zip-icon UpdatePanelTinyMCE.zip (C#)

Uppdatering: Joakim har skrivit om exemplet till VB.NET, läs mer på hans blogg.

Comments

Hej! Tack för ett så snabbt svar :D Koden fungerar helt perfekt och bloggade lite kort om det: http://joakimk.blogspot.com/2007/07/tinymce-inside-of-aspnet-ajax.html
Har arbetat en dag nu med UpdatePanel och TinyMCE och kommit fram till att det kan bli lite tungt om man har många editorer som ska laddas om. Jag kommer troligtvis att kolla på att använda Web Services för den typen av CRUD forms.
Kul att det fungerade och trevligt att du gjorde om exemplet till VB. Ja du har rätt att det blir tungt med TinyMCE i UpdatePanels. Ibland ser det ut som hela sidan laddas om (istället för partial) bara för att editor hoppar till så. Det borde nog bli bättre om man använde en annan WYSIWYG-editor, men jag gillar TinyMCE i övrigt, så svårt att hitta en ersättare. Web Services i Ajax-funktioner låter intressant, har aldrig provat det själv. Men antar att man kan få snabbare uppdateringar då. Berätta gärna hur det har gått när du har provkört.
Nu har jag ändrat om sidan så att den använder webservices vilket tog bort de omladdningar som blev när jag använde UpdatePanel. Nakdelen med webservices är ett det blir lite mer kod. En stor fördel däremot är att man har mer kontroll när man helt styr flödet på klienten. Uppdaterade min blogg post lite med tips när man använder TinyMCE med web services.
Thanks for the help. The triggersave bit was exactly what I needed. The rest of the code didn't work for me though, probably because of MasterPages. Here's what I did, maybe it can help someone somewhere somehow sometime: In the MasterPage itself I added the usual: <script language="javascript" type="text/javascript" src="/tiny_mce/tiny_mce.js"></script> <script language="javascript" type="text/javascript"> tinyMCE.init({ mode : "textareas", theme : "simple", auto_reset_designmode : true }); </script> Now to convert the textareas on partial postback: <script language="javascript" type="text/javascript"> function TinyInit() { // Seems to be helluva important tinyMCE.idCounter = 0; // Get the webform (there can be only one in asp.net) var form = document.forms[0]; // Iterate all elements inside the webform for(var i = 0; i < form.elements.length; i++) { //If textarea, convert to TinyMCE if (form.elements[i].type == "textarea") tinyMCE.execCommand('mceAddControl', false, form.elements[i].id); } } </script> And to save the values before submitting: <script language="javascript" type="text/javascript"> function TinySave() { tinyMCE.triggerSave(false,true); } </script> In the Page_Load event of the MasterPage I add a javascript call to the TinyInit() function to on updatepanel init event: ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "init", "TinyInit();", true); Then all that is left to do is add: OnClientClick="TinySave()" to any button that might need the values of the textarea after postback (like a 'Save' button), or otherwise you wont see any of the changes you made inside the TinyMCE panel. The TinyInit() function just loops through all items on page and converts Textarea's into TinyMCE's. It's really mean and dirty, but I don't want to add each textarea clientid to the code manually, because the id's get real nasty when inside masterpages/panels/etc. If anyone has a better solution, please do tell. Regards, duncan
@Duncon clientid of the textarea can be used on master pages if it is declared runat=server e.g. tinyMce.updateContent('<%=txtpost.clientid %>'); Regards Rajesh
I have made an Ajax Control Extender to solve TinyMCE's problems with updatepanels. You can find it here http://weblog.e-agora.nl/cdevos/?p=4"> http://weblog.e-agora.nl/cdevos/?p=4
Hi CJ! Thanks for creating the TinyMCE Extender. I got noticed though the MS Forums about it a minute ago, so I've actually been writing a post about it meanwhile.
<a href="http://hi.baidu.com/zlgdgzl">baidu </a> <a href="http://zlgdgzl.blog.163.com/">163</a> <a href="http://blog.sina.com.cn/u/1423817594">sina</a> <a href="http://www.beijing-lv-guan.cn">beiing hotel</a>
'''
I have read all the comments above but none is useful for Tinymce to work with Ajax. Please give me a proper solution.
vibhu: The above code is working with the UpdatePanel. It is however not a great solution since the Iframe of TinyMCE is making the whole page flicker on update. I think the best way is to leave the html-editor outside of any Ajax-panels. I recommend to download the latest build from the TineMCE pages. There are now updated code with special components to use with Asp.Net.
Объёмные, слегка растрёпанные волнистые волосы – пожалуй, самый привлекательный женский образ, растиражированный режиссёрами в качестве секс- символа. Секрет успеха – в увлажнении! Сухие и ломкие волосы никогда не примут должной формы, поэтому перед укладкой обязательно воспользуйтесь питательной восстанавливающей маской. А затем распределите по всей длине мусс или пенку для формирования локонов. Сушите, слегка взбивая пряди руками. И, наконец, покрутите головой – дайте волосам занять удобное и естественное положение. Зафиксируйте причёску лаком. [url=http://jurnall.ucoz.ru/]Tнe absolute beginner или Правдивая история сочине автора Эдуард Лимонов[/url] Истина… Какое глубокое и емкое слово. Стараясь осмыслить его, мы говорим «истинная любовь, истинное. Мировые новости медицины на портале о здоровье EUROLAB - TEPCO планирует создать так называемый "водный саркофаг" на аварийных энергоблоках АЭС "Фукусима-1". Последние мировые новости в сфере медицины и здравоохранения, медицинский справочник лекарств и болезней, бесплатные медицинские консультации врача. Сабельник (трава и корни) применяют при многих заболеваниях: нарушение обмена веществ, болезни печени и желчного пузыря Продам старинную книгу "Краткое гомеопатическое лекарствоведение" 1898г. выпуска, С.-Петербург, А.Фон Фелленберг-Цинглер, перевод с немецкого, 306 страниц. сот.тел.: 8-928-2101002… Ринсулин Р (Rinsulin R) Insulin human Инсулин человеческий короткого действия Сахарный диабет 1 типа развивается, когда организм разрушает бета-клетки островковой ткани поджелудочной железы , которые вырабатывают Всеукраинская благотворительная организация "Час життя плюс" :: Медицинский портал EUROLAB Детские кабинеты. Стоматология для детей. [url=http://dio-soft.ucoz.ru/]Обоснование выбора транспортных средств и расчет потребности в них на плановый год - курсовая работа 2006 г.[/url] Для устранения осложнений, вызванных муковисцидозом может понадобиться помощь хирурга. Это заключается в следующем: Вживление плев Пишите нам, звоните, обращайтесь: мы уверены, что сможем выполнить все стоящие перед вами задачи! Велаксин velaxin venlafaxine - антидепрессант. По химической структуре венлафаксин нельзя отнести ни к одному известному классу антидепрессантов (трициклические, тетрациклические или другие). Он имеет две активные энантиомерные рацемические формы. Умение напрягать и расслаблять брюшные мышцы позволяет женщине подстраиваться под родовые схватки, уменьшая их боль и отдыхая между ни Ежедневное преодоление боли вследствие ревматоидного артрита – нелегкая задача. Для ослабления боли можно использовать лекарственные Депо-Провера (Depo-Provera) для применения в онкологии Medroxyprogesterone acetate противоопухолевый препарат. Депо-Провера является гестагеном, не обладающим эстрогенной активностью, его андрогенная активность считается минимальной Грибной салат с яйцом – рецепт приготовления на EUROLAB | Закуски из овощей и грибов и Закуски Магнитно-резонансная томография (МРТ) почек | Диагностика на EUROLAB [url=http://kooch.ucoz.ru/]Виды международной аренды, характеристика базисного условия фрахт - провозная плата оплачена до (ВЭД - контрольная)[/url] Услуги Детской клиники Инфант Услуги педиатрической службы на дому Консультации специалистов Лабораторные исследования Клинич �%9
Кисель из черники на портале EUROLAB – рецепты здорового питания и приготовления данного блюда, и Заготовки из овощей, подробное описание овощной, мясной, рыбной, молочной, фруктово-ягодной, грибной кухни; изделий из круп, муки. [url=http://mediaknigga.ucoz.ru/]Бизнес-план ателье, скачать примерный бизнес-план ателье[/url] Наш сайт создан специально для того, чтобы Вы могли быстро, легко и эффективно заказать выполнение любой учебной работы (от реферат�
Цефобид (Cefobid) Cefoperazone полусинтетический цефалоспориновый антибиотик с широким спектром действия, предназначенный только для парентерального введения [url=http://veselimsea.ucoz.ru/]Урок видео аватар[/url] По договору на заказ диплома, или другой работы мы берем предоплату всего в размере 30% от общей стоимости, поэтому для вас будет удобней оплатить заказ диплома или заказ курсовой работы наличными , после того как работа будет уже готова и когда Вы лично убедитесь в отменном качестве и эксклюзивности наших рефератов и курсовых работ. Предоплата берется лишь при выполнении дипломов, так как сам процесс является поэтапным и включает несколько стадий. Лечебная маска при розовых угрях – на EUROLAB | Применение ароматических масел в косметологии и Арома-косметика Стадии почечно-клеточного рака – на EUROLAB | и Почечно-клеточный рак Клуб взаимопомощи "Жизнь+", региональное представительство благотворительной организации «Всеукраинская сеть людей, живущих с ВИЧ/СПИДом» :: Медицинский портал EUROLAB Клецки по-чешски на портале EUROLAB – рецепты здорового питания и приготовления данного блюда, Гарниры к мясным продуктам и Гарнир, подробное описание овощной, мясной, рыбной, молочной, фруктово-ягодной, грибной кухни; изделий из круп, муки. Клинико-структурная характеристика опухолей органа зрения – на EUROLAB | Опухоли глаз и Болезни глаз Энап (Enap) :: Медицинский портал EUROLAB Ребенок в 5 месяцев не становится на ножку - Консультация детского невролога онлайн | Бесплатные консультации врачей на EUROLAB [url=http://showbiza.ucoz.ru/]Обучающие видео css[/url] Органы слуха человека | Анатомия Органа слуха, строение, функции, картинки на EUROLAB Новогодние игрушки опасны для здоровья (видео) :: Медицинский портал EUROLAB 10 секретов улучшения интимной жизни – на EUROLAB | Улучшаем сексуальные отношения и Любите крепче Онлайн консультации врача невропатолога на портале EUROLAB – это возможность бесплатно задать вопрос врачу невропатологу уже прямо сейчас! Головная боль при слабом венозном оттоке Клинический полиморфизм, генетическая гетерогенность и проблемы патогенеза первичных миопатий | EUROLAB | Научные статьи Вся информация о заболевании Отравление метиловым спиртом человека на портале EUROLAB – причины заболевания, симптомы и признаки, профилактика Отравления метиловым спиртом, диагностика и лечение, оказание первой помощи. Центральный лентигиоз Турена - симптомы болезни, профилактика и лечение Центрального лентигиоза Турена, причины заболевания и его диагностика на EUROLAB Вся информация о заболевании Паротитный панкреатит человека на портале EUROLAB – причины заболевания, симптомы и признаки, профилактика Паротитного панкреатита, диагностика и лечение, оказание первой помощи. [url=http://uroki-online.ucoz.ru/]3ds max видеокурс скачать[/url] Лечение герпеса с помощью ароматерапии – на EUROLAB | Лечение болезней с помощью ароматерапии и Обзор и факты Волчанка: психологические аспекты – на EUROLAB | Жить и преодолевая болезнь и Повседневная жизнь Желе из абрикосов на портале EUROLAB – рецепты здорового питания и приготовления данного блюда, и Сладкие блюда, подробное описание овощной, мясной, рыбной, молочной, фруктово-ягодной, грибной кухни; изделий из круп, муки. Лимфатические сосуды верхних конечностей человека | Анатомия Лимфатических сосудов верхних конечностей, строение, функции, картинки на EUROLAB Мировые новости медицины на портале о здоровье EUROLAB - ООН: В мире растет число употребляющих наркотические или психотропные вещества. Последние мировые новости в сфере медицины и здравоохранения, медицинский справочник ле
Кроме того, беспрепятственно получить полезную информацию могут люди, у которых в силу жизненных обстоятельств возникли вопросы в области недвижимости, экономики строительства и иных отраслей. Им не нужно искать специалистов, бегать по кабинетам, объясняя суть своей проблемы. Можно просто зайти в библиотеку онлайн на Bookkery и найти ответы на свои вопросы. К тому же, Bookkery – одно из немногих мест в интернет-пространстве, где можно читать книги бесплатно. Никакой платы за пользование кладезем профессиональных знаний с вас не возьмут. [url=http://conkord.ucoz.ru/]аудио книга зеланд скачать[/url] С тех пор переводную биллетристику я не читаю если ранее не читал переводов этого переводчика, русскоязычную книгу куплю только если ранее читал произведение этого автора. вот такая вот ботва. Бывает тайна. Если книга не опубликована, а лежит у автора в столе, то тайна есть. Когда книгу опубликовали, или стырили, то тайна исчезает. dormouse wrote: Это какой же оператор в 200 км от столицы не оплачивает услуги по смс???? Даже за 8000 верст от нее спокойно можно оплатить :-) Еще одна библиотека — «Альдебаран» — одна из старейших библиотек, одной из первых заключивших пакт с организацией «ЛитРес», позволявшей законно скачаивать книги за мелкую мзду. Но несмотря на это, некоторые книги там все еще доступны бесплатно. yurbox wrote: Ну уж если Шейкспир не гнушался своего билетерства, отчего бы и современному "творцу" работою гнушаться? Какое "билетёрство"? что Вы меле-то?! Дурачку поверили? Шейкспир был В ДОЛЕ со сборов -- это по-нашему всё равно что иметь процент с продаж. А почему-то современный творец должен пахать? Для того что ли что бы недоумкам угодить? Воображаю: Достоевский вместо того что бы писать морковочку садит (как здесь недоумки требуют от писателей), Агаша Кристи шьёт на дому, Дюма-отец разносит почту а Дюма-сын моет окна. Ну давайте творчески разовьем тезис: Иван Павлов подметает улицы в свободное от собак время, Нильс Бор моет посуду в пабе, Битлы играют на похоронах а Фредди Меркюри тихо и скромно торгует телом в закаулках. Ну не идиоты ли вы все? Любой труд ДОЛЖЕН быть оплачен, и автор должен получать свои бабки. Другое дело что покупать кота в мешке, или платить куче хитрожопых посредников/операторов лично я не желаю. Давайте я ответ напишу в конце ветки, что ли? А то невозможно становится читать - скоро по одной букве на строчку останется. [.] Культуртригер уже рассказывал вам о том, где можно бесплатно скачать книги в fb2. Но  там была в основном художественная литература, а [.] [url=http://girlsait.ucoz.ru/]скачать аудиокнигу древний[/url] Цитата: Это только часть той работы, за которую можно в дальнейшем требовать денег. Извините, но эта позиция пахнет простой и извечной завистью пролетария к работнику умственного труда: "Хе, книжку он написал! Ты попробуй, как я - говно в тачке повози 8 часов в день. Вот за это НАДО мне деньги платить. Так мне еще и плотют мало, потому как ты, писака, говно не возишь, а сидишь в тепле, и мою деньгу в свой карман гребешь". Наша задача как читателей - первых и третьих по мере сил гнобить, а вторых поддерживать. Декадентство -- это ни что иное, как к буржуазии подход. (В. Дорошевич) Цитата: Не отметая того варианта, что книга должна быть оплачена, я против варианта, который не предполагает непротивления обеих сторон. Ну слава богу)) А я и говорю лишь об оплате за РЕЗУЛЬТАТ. Но не об оплате вообще за факт написания любой книги. Antraks wrote: как бы вам пояснить - писать полностью по вдохновению (что именно и приносит удовольствие) можно. и это очень классно и здорово. А вот когда нужно править, чистить, сюжет выстраивать, роялей избегать, матчасть учить - удовольствия в этом маловато. но это и не работа н%

I have read all the comments above but none is useful post.thanks http://www.onlinepromotionuae.ae

Thanks for nice information.

eCommerce Web Development Company

Great information! Thanks for sharing with us.

hp printer support number epson printer support number

Great post. Thanks for sharing...

solar Power Systems in Agra

Our technicians are available 24x7 to serve you. Call us toll free 0800-098-8352 Hotmail contact number UK, Hotmail support number UK, Hotmail phone number UK and get rid of all your technical issues solution.

If you want instant technical support help for your Lenovo laptop or computer, you can give us call at 0800-098-8371 Lenovo Support Number UK. The technical team will always available for your help.

Thank a lot for this post that was very. Keep posting like those amazing posts, this is really awesome Canon Printer Support Number UK is the only place where you can get answers for all your queries and get all problems of printer fixed.

Superb post. Many thanks for discussing valuable content material. No doubt each one of these tips are extremely much ideal for bloggers. i think it’s very helpful for every parson. nice post.We provide you online help and support.Call us at Our Canon Printer Contact Number UK0800-098-8354.

Hi, Thanks for the sharing nice posting with us. i am really impressed. We are offering a new and latest McAfee Antivirus Service.Contact @0800-098-8632 for McAfee Support, McAfee Technical Support, McAfee Support Number, McAfee Customer Support, McAfee Customer Service, McAfee Installation, McAfee Technical Help Number, McAfee Antivirus Service, McAfee Helpline Number.

Please fill out all the fields.

*
*