TinyMCE с Ajax (Панель Обновления) никогда не имеет значение

Я хотел использовать Визуальный редактор для текстовой области в панели обновления.

Я нашел это сообщение: http://www.queness.com/post/212/10-jquery-and-non-jquery-javascript-rich-text-editors через этот вопрос: нужен Визуальный редактор ASP.Net/MVC

Решенный для движения с TinyMCE, поскольку я использовал его прежде в не ситуации с Ajax, и это говорит в том списке, это - совместимый Ajax. Хорошо я делаю старое доброе tinyMCE.init({ //settings here }); Проверьте его, и это исчезает после выполнения обновления панели обновления. Я фигурирую из вопроса на здесь, что это должно быть в page_load функционируйте, таким образом, это выполняется даже на асинхронных обратных передачах. Хорошо сделайте это и панель остаются. Однако после попытки отправить значение от моей текстовой области, текст его всегда возвращается как пустой, потому что мой блок проверки допустимости формы всегда говорит, что "Необходимо ввести описание", даже когда я ввожу текст в него. Это происходит в первый раз загрузки страницы и после того, как асинхронные обратные передачи были сделаны к странице.

Хорошо я нахожу этот http://www.dallasjclark.com/using-tinymce-with-ajax/ и не Могу отправить дважды от той же текстовой области AJAX TinyMCE. Я пытаюсь добавить этот код в свою функцию загрузки страницы прямо после tinyMCE.init. Выполнение этого повреждает весь мой jQuery, называемый также в page_load после него, и это все еще имеет ту же проблему.

Я - все еще симпатичный новичок к клиентскому материалу сценариев, поэтому возможно, я должен поместить код в другое место, чем page_load? Не уверенный сообщения, которые я связал, не были очень подсказкой о том, куда поместить тот код.

Мой JavaScript:


Теперь мой текущий код не имеет tinyMCE.execCommand("mceAddControl",true,'content'); который должен также быть добавлен тот один обозначенный вопрос. Я пытался добавить его, но, снова, не был уверен, куда поместить его, и просто помещение его в page_load, казалось, не имело никакого эффекта.

Управление текстовым полем:


Как я могу получить эти значения так, чтобы код позади мог на самом деле получить то, что вводится в текстовой области, и мой блок проверки допустимости не подойдет, что это пусто? Даже после асинхронных обратных передач, так как у меня есть несколько кнопок на форме, которые обновляют ее до фактического представления.

Спасибо!

Править: Для дальнейшего разъяснения у меня есть проверка формы на бэкенде как так:

If tbDescription.Text = "" Or tbDescription.Text Is Nothing Then
        lblDescriptionError.Text = "You must enter a description."
        isError = True
    Else
        lblDescriptionError.Text = ""
    End If

И эта ошибка будет всегда заставлять сообщение об ошибке быть отображенным.

Править:

Хорошо я становлюсь отчаянным здесь, я провел часы на это. Я наконец нашел то, что я думавший быть победителем на обмене экспертов, который указывает следующее (была часть о кодировании значения в xml, но я пропустил это): http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_25059848.html

Для любого, кто хочет использовать tinyMCE с AJAX.Net:

  1. Добавьте начинают/заканчивают обработчики к объекту Запроса Ajax. Они удалят управление tinyMCE прежде, чем отправить, данные (начинаются), и оно воссоздаст управление tinyMCE (конец):

    Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(function(sender, args) {
        var edID = "<%=this.ClientID%>_rte_tmce"; // the id of your textbox/textarea.
        var ed = tinyMCE.getInstanceById(edID);
      if (ed) {
        tinyMCE.execCommand('mceFocus', false, edID);
        tinyMCE.execCommand('mceRemoveControl', false, edID);
    }
        });
    
      Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, args) {
         var edID = "<%=this.ClientID%>_rte_tmce";
          var ed = tinyMCE.getInstanceById(edID);
          if (ed) {
        tinyMCE.execCommand('mceAddControl', false, edID);
          }
       });
    
  2. Когда пользователь изменяется/размывает от управления tinyMCE, мы хотим удостовериться, что текстовая область/текстовое поле обновляется правильно:

       ed.onChange.add(function(ed, l) {
           tinyMCE.triggerSave(true, true);
     });
    

Теперь я попробовал этот код, поместив его в его собственный тег script, поместив начинание, и конец запрашивает в их собственные теги script и помещая ed.onChange в page_load, помещая все в page_load, и помещающий все 3 в свой собственный тег script. Во всех случаях это никогда не работало и даже иногда повреждало jQuery, который находится также в моем page_load... (и да я изменил вышеупомянутый код для установки моей странице),

Кто-либо может заставить это работать или предлагать решение?

Код

11
задан Community 23 May 2017 в 10:29
поделиться

4 ответа

У меня было два способа заставить это работать, но они действительно не решали проблему, просто избегайте этого.

Один из них заключался в использовании элемента управления FCKeditor .net, он перезагружался ужасно медленно, хотя для меня, примерно 2-3 секунды. Поэтому я решил просто сделать форму двумя панелями обновления и поместить текстовую область между ними, по существу убрав текстовую область из панели обновления. Это было похоже на дешевый трюк, в котором не должно быть необходимости, но он отлично работает. Ни одно из опубликованных решений или предложений не помогло мне, так что я так и поступил. Если бы мне пришлось поместить текстовую область в панель обновлений, это бы не сработало.

0
ответ дан 3 December 2019 в 11:20
поделиться

Думаю, вы хотите посмотреть это сообщение: Как заставить TinyMCE работать внутри UpdatePanel?

Убедитесь, что чтобы зарегистрировать вашу функцию init в диспетчере сценариев

ScriptManager.RegisterStartupScript(this.Page, 
         this.Page.GetType(), mce.ClientID, "pageLoad();", true);
2
ответ дан 3 December 2019 в 11:20
поделиться

Одна вещь, с которой я столкнулся при добавлении TinyMCE в панель обновлений, заключалась в том, что мне приходилось проделывать всевозможные трюки, чтобы заставить его работать правильно. Помните, как работает панель обновления: когда вы хотите ее обновить, она полностью заменяет DOM внутри нее, включая TinyMCE.

Обходной путь, который я использовал, заключался в том, чтобы удалить TinyMCE с панели обновлений и обернуть все остальное, что необходимо для динамического обновления, в панель обновлений. Затем я бы добавил данные в TinyMCE через API javascript, который он предоставляет, если мне нужно, чтобы содержимое TinyMCE было динамическим.

0
ответ дан 3 December 2019 в 11:20
поделиться

Вы должны активировать функцию сохранения при обратной публикации, используйте Page.RegisterOnSubmitStatement для регистрации скрипта tinyMCE.triggerSave ();

Я заметил, что Функция tinyMCE init может быть вызвана только выбором всех текстовых областей или текстовых областей с определенным классом. точное не работает.

1
ответ дан 3 December 2019 в 11:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: