从CURRENT aspx-Page获取HTML到字符串值(代码隐藏)

时间:2014-09-10 09:06:54

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

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

1 个答案:

答案 0 :(得分:0)

很可能你必须通过AJAX来做到这一点。将HTML的内容获取到JavaScript变量,然后将变量POST到后端(现在您拥有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;
            }
        }
    }
}

是的,这段代码是非常未经测试的,但我认为你得到了它的要点。