Telerik RadEditor HTTP POST VALUE не обновляется (веб-формы ASP.NET)

В настоящее время я пишу ContentManager в ASP.NET. У меня есть кнопка предварительного просмотра, которая использует jQuery для публикации данных формы в новом окне и показывает, как будет выглядеть страница, не сохраняя ее в базе данных и не влияя на живой сайт. Хотя заставить ASP.NET отправлять сообщения непосредственно на страницу, которую я пытаюсь просмотреть, было довольно сложно, я, наконец, решил все это, используя серию кода jQuery. Это работало прекрасно, я загрузил все значения сообщений на страницу с помощью Request.Form и отобразил их на странице. К сожалению, по какой-то причине Telerik RadEditor, который я использовал, отправлял мне значения, которые им были присвоены в событии C # Page_Load, и не отражал внесенные мной текстовые изменения. Если бы кто-нибудь мог мне помочь, это было бы здорово.

function showPreview()
{
    url = "<%= (SiteManager.GetSite()).Url  + this.Filename %>?preview=true"; 
    var specs = "width=1010,height=700,location=0,resizeable=1,status=1,scrollbars=1"; 
    window.open(url, 'PagePreview', specs).moveTo(25, 25);
    $("#__VIEWSTATE").remove();
    $("#__EVENTTARGET").remove();
    $("#__EVENTARGUMENT").remove();
    $("#aspnetForm").removeAttr("action");
    $("#aspnetForm").attr("target","PagePreview");
    $("#aspnetForm").attr("action", url);
    $("#aspnetForm").submit(); 
}

Вот все данные поста, которые я получаю от tererik RADEDITOR ::

[ctl00_MainContentPlaceHolder_SideContentRadEditor_dialogOpener_Window_ClientState] => [ctl00_MainContentPlaceHolder_SideContentRadEditor_dialogOpener_ClientState] => [ctl00$MainContentPlaceHolder$SideContentRadEditor] => [ctl00_MainContentPlaceHolder_SideContentRadEditor_ClientState] => [ctl00_MainContentPlaceHolder_ContentRadEditor_dialogOpener_Window_ClientState] => [ctl00_MainContentPlaceHolder_ContentRadEditor_dialogOpener_ClientState] => [ctl00$MainContentPlaceHolder$ContentRadEditor] => %3cp%3eTestPageContent%3c/p%3e 

Это значение html текстового редактора (показано выше) %3cp%3eTestPageContent%3c/p%3e Это значение в RadEditor, которое было загружено во время события Page_Load.

Я изменил значение на «Тест». Но он не был отправлен по запросу POST, он отправил то, что было загружено при загрузке страницы.


person TroySteven    schedule 30.09.2011    source источник


Ответы (2)


Область содержимого редактора отделена от текстовой области, используемой для отправки содержимого во время запроса POST. Редактор автоматически попытается сохранить содержимое в скрытой текстовой области при отправке формы, но в вашем случае никакое событие не запускается, потому что это происходит программно (т.е. вы вызываете .submit()). Вам нужно будет попросить редактора сохранить его содержимое вручную, прежде чем выполнять обратную передачу. Код довольно простой — получите ссылку на редактор и вызовите .saveContent():

//Grab a reference to the editor
var editor = $find("<%=theEditor.ClientID%>");

//Store the content in the hidden textarea so it can be posted to the server
editor.saveContent();
person lingvomir    schedule 03.10.2011
comment
@matwonk Поскольку ответ lingvomir сработал отлично, вам следует подумать о том, чтобы пометить его как ответ. - person Andrew Barber; 10.12.2011

Одним из решений было бы получить текущий HTML-код в редакторе в вашем методе showPreview и передать его вручную. Для этого добавьте на страницу скрытый элемент ввода для хранения содержимого HTML:

<input type="hidden" id="htmlContent" name="htmlContent" />

Затем вы можете установить значение intput в showPreview следующим образом:

function showPreview()
{
    url = "<%= (SiteManager.GetSite()).Url  + this.Filename %>?preview=true"; 
    var specs = "width=1010,height=700,location=0,resizeable=1,status=1,scrollbars=1"; 
    window.open(url, 'PagePreview', specs).moveTo(25, 25);
    $("#__VIEWSTATE").remove();
    $("#__EVENTTARGET").remove();
    $("#__EVENTARGUMENT").remove();

    //   *** Begin New Code ***
    //Grab a reference to the editor
    var editor = $find("<%=theEditor.ClientID%>");

    //Get the current HTML content
    var html = editor.get_html()

    //Put that HTML into this input so it will get posted
    $("#htmlContent").val(html);
    //    *** End New Code ***

    $("#aspnetForm").removeAttr("action");
    $("#aspnetForm").attr("target","PagePreview");
    $("#aspnetForm").attr("action", url);
    $("#aspnetForm").submit(); 
}

Затем, когда вы хотите получить HTML во время обратной передачи, вы можете просто использовать Request.Form["htmlContent"]

Одно предостережение: поскольку вы будете публиковать необработанный HTML, Проверка запроса ASP.NET может вызвать проблемы. Одна из основных целей этой проверки — убедиться, что HTML-контент не будет отправлен обратно на сервер — как раз то, чего вы пытаетесь достичь. Вы, конечно, можете отключить валидацию (см. ссылку выше), но валидация существует не просто так. Другим решением может быть выполнение базовой кодировки HTML перед его публикацией. Если вы просто замените все символы «меньше» (‹) на что-то перед публикацией, ASP.Net будет доволен. Затем вам просто нужно «не заменить» его во время обратной передачи.

person Stephen McDaniel    schedule 01.10.2011