Telerik RadEditor HTTP POST VALUE не обновляется (ASP.NET Web Forms) - PullRequest
3 голосов
/ 30 сентября 2011

В настоящее время я пишу 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(); 
}

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

[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-запрос, он отправил то, что было загружено при загрузке страницы.

Ответы [ 2 ]

5 голосов
/ 03 октября 2011

Область содержимого редактора отделена от текстовой области, используемой для отправки содержимого во время запроса 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();
0 голосов
/ 01 октября 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 будет счастлив. Тогда вам просто нужно «заменить» его во время обратной передачи. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...