Я хотел использовать Rich Text Editor для текстовой области внутри панели обновления.
Я нашел этот пост: http://www.queness.com/post/212/10-jquery-and-non-jquery-javascript-rich-text-editors с помощью этого вопроса: Нужен ASP.Net/MVC Rich Text Editor
Решил использовать 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:
<script type="text/javascript">
var redirectUrl = '<%= redirectUrl %>';
function pageLoad() {
tinyMCE.init({
mode: "exact",
elements: "ctl00_mainContent_tbDescription",
theme: "advanced",
plugins: "table,advhr,advimage,iespell,insertdatetime,preview,searchreplace,print,contextmenu,paste,fullscreen",
theme_advanced_buttons1_add_before: "preview,separator",
theme_advanced_buttons1: "bold,italic,underline,separator,justifyleft,justifycenter,justifyright, justifyfull,bullist,numlist,undo,redo,link,unlink,separator,styleselect,formatselect",
theme_advanced_buttons2: "cut,copy,paste,pastetext,pasteword,separator,removeformat,cleanup,charmap,search,replace,separator,iespell,code,fullscreen",
theme_advanced_buttons2_add_before: "",
theme_advanced_buttons3: "",
theme_advanced_toolbar_location: "top",
theme_advanced_toolbar_align: "left",
extended_valid_elements: "a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]",
paste_auto_cleanup_on_paste: true,
paste_convert_headers_to_strong: true,
button_tile_map: true
});
tinyMCE.triggerSave(false, true);
tiny_mce_editor = tinyMCE.get('ctl00_mainContent_tbDescription');
var newData = tiny_mce_editor.getContent();
tinyMCE.execCommand('mceRemoveControl', false, 'your_textarea_name');
//QJqueryUI dialog stuff
}</script>
Теперь мой текущий код не имеет tinyMCE.execCommand("mceAddControl",true,'content');
, который также должен быть добавлен к одному указанному вопросу. Я попытался добавить его, но, опять же, не знал, куда его поместить, и просто поместить его в page_load, похоже, не дало никакого эффекта.
Управление текстовым полем:
<asp:TextBox ID="tbDescription" runat="server" TextMode="MultiLine"
Width="500px" Height="175px"></asp:TextBox><br />
Как я могу получить эти значения, чтобы код на самом деле мог получить то, что напечатано в текстовой области, и мой валидатор не выдал сообщение, что он пустой? Даже после асинхронных обратных передач, поскольку у меня есть несколько кнопок в форме, которые обновляют ее до фактической отправки.
Спасибо!
Редактировать: Для дальнейшего разъяснения у меня есть проверка формы на сервере, например:
If tbDescription.Text = "" Or tbDescription.Text Is Nothing Then
lblDescriptionError.Text = "You must enter a description."
isError = True
Else
lblDescriptionError.Text = ""
End If
И эта ошибка всегда приводит к отображению сообщения об ошибке.
Edit:
Хорошо, я впадаю в отчаяние, я потратил на это часы. Я наконец нашел то, что я считаю победителем в обмене экспертами, в котором говорится следующее (была часть о кодировании значения в xml, но я пропустил это): http://www.experts -exchange.com / Programming / Languages / C_Sharp / Q_25059848.html
Для тех, кто хочет использовать tinyMCE с AJAX.Net:
Добавление обработчиков начала / конца к объекту запроса 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);
}
});
Когда пользователь меняет / размывает элемент управления tinyMCE, мы хотим убедиться, что текстовое поле / текстовое поле обновляется правильно:
ed.onChange.add(function(ed, l) {
tinyMCE.triggerSave(true, true);
});
Теперь я попробовал этот код, поместив его в свой собственный тег сценария, поместив запросы начала и конца в их собственные теги сценария и поместив ed.onChange в page_load, поместив все в page_load и поместив все 3 в него. собственный скрипт тега. Во всех случаях это никогда не работало, и даже иногда нарушало jquery, который также находится в моей page_load ... (и да, я изменил приведенный выше код, чтобы соответствовать моей странице)
Может кто-нибудь заставить это работать или предложить решение?
код