简体   繁体   English

使用C#异步回发保存Javascript值

[英]Save Javascript Value Using C# Async Postback

I have an Asp TextBox called txt_edit_content whose value is being copyed and manipulated using a JavaScript Wysiwyg. 我有一个名为txt_edit_content的Asp TextBox,其值正在使用JavaScript Wysiwyg txt_edit_content和操纵。 The formatted text is stored in a JavaScript variable that I can access like so: 格式化的文本存储在我可以访问的JavaScript变量中,如下所示:

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

What I'm attempting to do is send that value back to the server. 我试图做的就是将该值发送回服务器。 So, I have registered the following JavaScript function with the Sys.WebForms.PageRequestManager 因此,我已经在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);
    }
}

And registering it like so: 并像这样注册:

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

The JavaScript console output before the POST is made looks like so: 进行POST之前的JavaScript控制台输出如下所示:

Textbox Before: 1234 
    Javascript: <p>1234567</p> 
 Textbox After: <p>1234567</p>

The issue I'm running into is that the value, even though it is being changed on page, isn't being sent to the server. 我遇到的问题是,即使在页面上更改了该值,该值也没有发送到服务器。 However the 'Textbox Before' value is being sent. 但是,“文本框之前”值正在发送。 How can I get the value out of my JavaScript and into my code? 如何从JavaScript中获取价值并在代码中获取价值?

Edit: I can get this code to work using a PostBackTrigger but not AsyncPostBackTrigger on the 'Save' button. 编辑:我可以使用PostBackTrigger而不是“保存”按钮上的AsyncPostBackTrigger来使此代码正常工作。 However, I need (would like) to use the AsyncPostBackTrigger on the 'Save' button. 但是,我需要(想要)在“保存”按钮上使用AsyncPostBackTrigger

Use an update panel and wrap a Hidden field in it. 使用更新面板,然后在其中包裹一个“隐藏”字段。 Then in your handler, set the value of the hidden field. 然后在您的处理程序中,设置隐藏字段的值。

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);
    }
}

Now in your code behind you can get the value of hidValue. 现在,在后面的代码中,您可以获取hidValue的值。

I was able to get it to work without using another field or having to add a handler to the PageRequestManager 我能够使它工作,而无需使用其他字段或不必向PageRequestManager添加处理程序

By creating the following JavaScript function 通过创建以下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);
    }
}

Then calling it through my save button like so: 然后通过我的保存按钮调用它,如下所示:

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

I was able to get the JavaScript value stored in my textbox then pulled with my code-behind. 我能够将JavaScript值存储在文本框中,然后将其隐藏在代码中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM