【问题标题】:Get HTML from CURRENT aspx-Page to String Value (Codebehind)从 CURRENT aspx-Page 获取 HTML 到字符串值(代码隐藏)
【发布时间】:2014-09-10 09:06:54
【问题描述】:

我目前正在开发一个(几乎)可以使用 CKEditor 完全内联编辑的页面。因此,在用户完成编辑后,我想获取纯 HTML 代码,删除编辑器控件并通过电子邮件发送结果。这会取消 WebRequest-Method 的资格,因为这会“重新加载”页面。是否可以选择从字符串中的页面获取当前 html?

【问题讨论】:

    标签: asp.net html c#-4.0 ckeditor


    【解决方案1】:

    您很可能必须通过 AJAX 执行此操作。将 HTML 的内容获取到一个 JavaScript 变量,然后将该变量发布到您的后端(您现在拥有 WebRequest)。如果您使用 jQuery,请尝试这样的操作:

    var markup = document.documentElement.innerHTML;
    alert("Submitting: " + markup"); // big alert...
    
    $.ajax({
        type: "POST",
        url: "path/to/HTML_handler.aspx",
        data: { html: markup }
    })
    .done(function(msg) {
        alert("Data Saved: " + msg);
    });
    

    然后在您的后端读取发布的 html 变量并将其吐到后端。


    编辑 11.9.2014

    我自己是 MVC 人,但我认为经典的 ASP.net 执行此操作的方式是这样的:在您的 aspx 视图中,添加一个按钮,例如:<button id="Derp">I love ponies</button>。添加对 jQUery 的引用:<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>(我在这里使用的是 Google CDN)。然后给按钮绑定一个点击事件:

    <script type="text/javascript">
        $(function() {
            var btn = $('#Derp');
            btn.click(function() {
                var markup = document.documentElement.innerHTML;
                alert("Submitting...");
    
                $.ajax({
                    type: "POST",
                    url: "AJAXRequest.ashx", // Important that this points to the right file...
                    data: { html: markup }
                })
                .done(function(msg) {
                    alert("Data Saved: " + msg);
                });
            });
        });
    </script>
    

    然后创建一个后端处理程序(Google 获取更多教程),如下所示:

    AJAXRequest.asgx(是的,只有一行):

    <%@ WebHandler Language="C#" CodeBehind="AJAXRequest.ashx.cs" Class="WebApplication1.AJAXRequest" %>
    

    AJAXRequest.ashx.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Script.Serialization;
    
    namespace WebApplication1
    {
        public class AJAXRequest : IHttpHandler
        {
            public void ProcessRequest(HttpContext context)
            {
                // Not sure which one to use here, try both
                string html1 = context.Request["html"];
                string html2 = context.Request.Form["html"];
    
                // Do whatever you want with the html...
    
                context.Response.Write("OMG I just found: " + html1);
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }
    

    是的,这段代码未经测试,但我想你明白了它的要点。

    【讨论】:

    • 如果你不能使用 jQuery,只使用原生 JavaScript,它也可以正常工作,但我懒得写一个例子,因为 jQuery
    • 感谢您的回答。我从未使用过 jQuery 或 JavaScript。如何将您的代码包装在 .aspx 文件中?以及如何在 Codebehind 中获取发布的标记?编辑:我怎样才能在 ButtonClick 中运行这个脚本?
    • 我添加了一个编辑,你可以看看吗?如果你想将它包含在一个 aspx 文件中以处理由 ButtonClick 或其他东西触发的脚本块内的请求,你必须通过谷歌搜索来弄清楚 - 这对我来说似乎是一种不好的做法。很可能你可以做到,但我真的不推荐它。也许你会找到一个 ASPX 大师,可以通过 ASP 框架进行的回发或部分 AJAX 调用来做到这一点,但对我来说,这听起来......错了。
    • 感谢这个非常有用的答案。我收到 ParseError: The directive 'webhandler' is unknown. 我错过了什么吗?谷歌研究不提供解决方案。再次感谢,对不起我的愚蠢
    猜你喜欢
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    相关资源
    最近更新 更多