从aspx页面获取json格式的响应,而不是纯html格式

get response from aspx page in json format instead of plain html

本文关键字:格式 html 响应 aspx 获取 json      更新时间:2023-09-26

我想对服务器进行ajax调用。我需要获取页面say foo.aspx的html:Foo.aspx html:

<form>
<div>foo</div>
</form>

我从远程页面调用此页面,如:

         $.ajax({
             url: '/foo.aspx',
             data: {},
             contentType: 'application/json; charset=utf-8',
             dataType: 'json',
             success: function (response) {
             }
         });

我需要这个页面的html,但我的要求是这个页面的响应应该是JSON格式。即

{"myresponse": {
  "id": "123",
  "html":<HTML of foo.aspx>,
}} 

我需要html作为json属性,因为我也需要从foo.aspx代码后面设置其他属性?如何以json格式而不是纯html格式从aspx页面获得响应?从服务器获取json格式的远程页面HTML和其他属性的其他方法是什么?我应该选择HTTPHandlers吗?如果是,我如何在HTTPHandler中获取foo.aspx的html?

您可能需要尝试覆盖页面的呈现方法:

    protected override void Render(HtmlTextWriter writer)
    {
        var sw = new System.IO.StringWriter();
        var tw = new HtmlTextWriter(sw);
        base.Render(tw);
        Response.Write(String.Format("{{'"myresponse'": {{  '"id": '"123",'"html'":'"{0}'"}}}}"
        , Server.HtmlEncode(sw.ToString()).Replace("'n"," "));
        Response.Flush();
        Response.End();
    }

很抱歉出现任何语法错误,并对回车的基本处理表示歉意。我想在page_load(Response.BufferOutput=true)期间缓冲输出会更好

如果需要HTML,请将数据类型更改为HTML。成功事件将返回html作为响应。

类似于:

$.ajax({
     url: '/foo.aspx',
     dataType: 'html',
     success: function (data, textStatus, jqXHR) {
            alert(data); //data is html. 
     }
 });​

基本上,您必须创建一个HTTPHandler,将Foo.aspx输出封装到JSON evelope中。话虽如此,JS调用将指向url'/MyWebHandler?page=foo.aspx,而不仅仅是/foo.aspx。在处理程序中,您只需要查询页面并转储其输出。

我稍微改变了jbl重写Render方法的示例,这对我来说非常有效。我不需要HTML编码,只需要应用一些格式并包括内容类型

            protected override void Render(HtmlTextWriter writer)
            {
                var sw = new System.IO.StringWriter();
                var tw = new HtmlTextWriter(sw);
                base.Render(tw);
                var html = sw.ToString();            
                html = html.Replace("'n", " ");
                html = html.Replace("'r", " ");
                html = html.Replace("'t", " ");
                var data = html.Replace("'"", "'''"");
                data = data.Replace("/", "''/");
                var json = String.Format("{{'"html'":'"{0}'"}}", data);
                Response.ContentType = "application/json";
                Response.Write(json);
                Response.Flush();
                Response.End();
            }