使用C#异步Postback保存Javascript值

Save Javascript Value Using C# Async Postback

本文关键字:Javascript 保存 Postback 异步 使用      更新时间:2023-09-26

我有一个名为txt_edit_content的Asp TextBox,它的值正在使用JavaScript Wysiwyg进行复制和操作。格式化后的文本存储在一个JavaScript变量中,我可以这样访问:

var data = CKEDITOR.instances.<%=txt_edit_content.ClientID%>.getData();

我试图做的是将该值发送回服务器。因此,我在Sys.WebForms.PageRequestManager 中注册了以下JavaScript函数

function BeginRequestHandler(sender, args) {
    try{
        var data = CKEDITOR.instances.<%=txt_edit_content.ClientID%>.getData();
        console.log("Textbox Before: " + $('#<%=txt_edit_content.ClientID%>').val());
        console.log("    Javascript: " + data);
        $('#<%=txt_edit_content.ClientID%>').val(data);
        console.log(" Textbox After: " + $('#<%=txt_edit_content.ClientID%>').val());
    } catch (err) {
        console.log("Error:" + err.message);
    }
}

并像这样注册:

var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);

POST之前的JavaScript控制台输出如下所示:

前文本框:1234Javascript:<p>1234567<p>文本框位于:<p>1234567<p>

我遇到的问题是,即使值在页面上被更改,它也没有被发送到服务器。但是,正在发送"Textbox Before"值。如何从JavaScript中获取价值并将其输入到代码中?

编辑:我可以使用"保存"按钮上的PostBackTrigger而不是AsyncPostBackTrigger来运行此代码。但是,我需要(希望)使用"保存"按钮上的AsyncPostBackTrigger

使用更新面板并在其中包装一个隐藏字段。然后在处理程序中设置隐藏字段的值。

function BeginRequestHandler(sender, args) {
    try{
        var data = CKEDITOR.instances.<%=txt_edit_content.ClientID%>.getData();
        console.log("Textbox Before: " + $('#<%=txt_edit_content.ClientID%>').val());
        console.log("    Javascript: " + data);
        $('#<%=txt_edit_content.ClientID%>').val(data);
        console.log(" Textbox After: " + $('#<%=txt_edit_content.ClientID%>').val());
        $('#<%=hidValue.ClientID%>').val(data);
    } catch (err) {
        console.log("Error:" + err.message);
    }
}

现在,在您的代码后面,您可以获得hidValue的值。

我能够在不使用其他字段或不必向PageRequestManager 添加处理程序的情况下使其工作

通过创建以下JavaScript函数

function SaveWysiwig() {
    try{
        var data = CKEDITOR.instances.<%=txt_edit_content.ClientID%>.getData();
        $('#<%=txt_edit_content.ClientID%>').val(data);
    } catch (err) {
        console.log("Error:" + err.message);
    }
}

然后通过我的保存按钮这样调用它:

<asp:LinkButton ID="savePage" runat="server" Text="Save" OnClientClick="SaveWysiwig();" OnClick="SavePage" />

我能够获得存储在我的文本框中的JavaScript值,然后在后面提取我的代码。