我正在使用jQuery编辑器,当用户点击提交按钮时,我将内容放入asp.net面板控件中作为html,然后当我渲染此面板时我添加的html不是 检索。
function MoveData() {
var sHTML = $('#summernote_1').code();
// dvFrontPageHtml is asp.net Panel
$('[id*=dvFrontPageHtml]').html(sHTML);
setTimeout(function () {
javascript: __doPostBack('ctl00$ctl00$ContentPlaceHolderBody$ContentPlaceHolderBody$lnkSave', '');
}, 10000);
return false;
}
System.Text.StringBuilder sb = new System.Text.StringBuilder();
System.IO.StringWriter stWriter = new System.IO.StringWriter(sb);
System.Web.UI.HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(stWriter);
dvFrontPageHtml.RenderControl(htmlWriter);
string Message = sb.ToString();
消息未返回添加的html。
我现在不想使用jQuery ajax调用。
任何建议
答案 0 :(得分:1)
没有看到所有相关代码,很难找出问题所在。
但我非常确定您正在尝试通过 clientside ID 中的服务器端ID 来查找ASP.net控件。
dvFrontPageHtml
是asp.net识别它的控件ID,除非您明确告诉ASP.Net,否则它将为 clientside 中的脚本生成一个不同的控件ID。
您需要检索由asp.net为其生成的面板的客户端ID
您是通过预处理程序指令<%=dvFrontPageHtml.ClientID%>
执行的:
$('[id*=<%=dvFrontPageHtml.ClientID%>]').html(sHTML);
或者,如果您希望客户端ID 与服务器端ID 相同,则可以设置控件的属性ClientIDMode="Static"
。
更新:
从您的评论看来问题似乎在其他地方。我想到的是,RenderControl()
采取了在响应中发送给客户端时的控制权。但控件未在下一个Request中提交给服务器,因此您将无法检索其更改的html。
你可以做什么作为一种解决方法,挂钩ASP.NET构建的回发机制,并将面板的html作为自定义事件参数提交:
例如,假设这是我们的html:
<asp:Panel ID="dvFrontPageHtml" runat="server" ClientIDMode="Static">test</asp:Panel>
<asp:Button ID="BT_Test" runat="server" Text="Button"></asp:Button>
这将是我们的javascript:
$(function(){
// add custom event handler for the submit button
$("#<%=BT_Test.ClientID%>").click(function (ev) {
//prevent the default behavior and stop it from submitting the form
ev.preventDefault();
//alter the panels html as you require
var sHTML = $('#summernote_1').code();
$('[id*=dvFrontPageHtml]').html(sHTML);
//cause a postback manually, with target = BTCLICK and argument = panel's html
__doPostBack('BTCLICK', $('[id*=dvFrontPageHtml]').outerHTML());
});
});
,我们在这里捕获服务器端的回发:
//we monitor page load
protected void Page_Load(object sender, EventArgs e)
{
string Message;
//check if its a postback
if (IsPostBack)
{
//monitor for our custom target "BTCLICK"
if (Request.Form["__EVENTTARGET"].CompareTo("BTCLICK") == 0)
{
// retrieve the panels html from the event argument
Message = Request.Form["__EVENTARGUMENT"];
}
}
}