我目前正在ASP.NET中编写ContentManager。我有一个预览按钮,该按钮使用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
这是在Page_Load事件期间加载的RadEditor中的值。
我将值更改为“测试”。但是它不是通过POST请求发送的,它发送的是页面加载中加载的内容。
最佳答案
编辑器内容区域与在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();