asp.net中的RenderControl没有使用JQuery将html添加到该控件中

时间:2014-12-06 12:55:39

标签: asp.net

我正在使用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调用。

任何建议

1 个答案:

答案 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"];
        }
    }
}