Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么JSON响应中的HTML会被编码?_C#_Jquery_Json_Asp.net Mvc 2_Jtemplate - Fatal编程技术网

C# 为什么JSON响应中的HTML会被编码?

C# 为什么JSON响应中的HTML会被编码?,c#,jquery,json,asp.net-mvc-2,jtemplate,C#,Jquery,Json,Asp.net Mvc 2,Jtemplate,我正在使用,详细介绍了如何使用jQuery和jTemplates将JSON响应填充到模板中 我的问题是,其中一个返回字段(名为Description)包含HTML,但HTML括号被编码为\u003C和\u003e 以下是服务器返回的HTML(在描述字段中): <a href="/en/Yokota/User/Show/Chad">Chad</a> updated their ad, <a href="/en/Yokota/Ad/Show/100">Valida

我正在使用,详细介绍了如何使用jQuery和jTemplates将JSON响应填充到模板中

我的问题是,其中一个返回字段(名为Description)包含HTML,但HTML括号被编码为\u003C和\u003e

以下是服务器返回的HTML(在描述字段中):

<a href="/en/Yokota/User/Show/Chad">Chad</a> updated their ad, <a href="/en/Yokota/Ad/Show/100">Validation Test Ad Again</a>, @<a href="/en/Yokota">Yokota</a>
请注意“\u003c”或“\u003e”。这些看起来像是unicode逃逸,但为什么会发生这种情况?下面是调用JSON响应的jQuery:

$.getJSON("<%= Url.Action("List", "Activity") %>",
    function(data){
        $("#aLog").setTemplate($("#templateHolder").html());
        $("#aLog").processTemplate(data);
    });
也许是因为快凌晨3点了,但我被难住了。。。非常感谢您的帮助,谢谢

更新2

public JsonResult List()
{
    IList<ActivityContract> contracts = new List<ActivityContract>();
    var activityList = _db.Activity.ByBaseID(CurrentBase.BaseID).OrderByDescending(a => a.DateHappened);
    foreach (var a in activityList) {
        contracts.Add(new ActivityContract { TypeOfActivity = a.TypeOfActivity.ToString(), Description = a.Description, DateHappened = a.DateHappened.ToString() });
    }
    return Json(contracts, JsonRequestBehavior.AllowGet);
}
公共JsonResult列表() { IList contracts=新列表(); var activityList=_db.Activity.ByBaseID(CurrentBase.BaseID).OrderByDescending(a=>a.dateoccurrent); foreach(activityList中的变量a){ contracts.Add(新的ActivityContract{TypeOfActivity=a.TypeOfActivity.ToString(),Description=a.Description,DateOccount=a.DateOfActivity.ToString()); } 返回Json(contracts,JsonRequestBehavior.AllowGet); }
使用utf8中的“contentType”进行如下检查

$.ajax({
键入:“获取”,
url:“”,
数据:“{}”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(数据){
$(“#aLog”).setTemplate($(“#templateHolder”).html();
$(“#aLog”).processTemplate(数据);
}
});
});

JSONSerializer使用unicode转义序列自动转义“”字符

jQuery应该能够正常解析这些。您使用的是$.getJSON方法,我认为该方法会自动将响应计算为json并取消对其进行scape,因此我有点困惑,为什么最终输出仍然包含转义代码

如果您这样做:

$("#aLog").processTemplate(eval("(" + data+ ")"));

这解决了问题吗?

事实证明,问题在于jTemplates中的设置。setTemplate行需要如下所示:

$("#aLog").setTemplate($("#templateHolder").html(), [], {filter_data: false});

特别是,必须将filter_数据设置为false。默认情况下,jTemplates html编码;(

您的操作方法如何返回值?作为JsonResult?我们可以看到代码吗?
processTemplate
做什么?@womp我添加了控制器代码。感谢您的快速响应。@Gumbo-不太确定,这是Microsoft对jQuery团队的贡献,jTemplates!=MS jQuery模板库。它完全不同。看起来像对我来说,模板引擎正在做你告诉它做的事情。你给它数据来显示,它正在显示。如果你想让数据成为HTML,引擎需要知道这一点。我不知道jTemplates,所以我不能说这是一个什么样的功能。这是我最初编写它的方式,同样的问题。你确定ver在请求中接受application/json?它没有接受,但是感谢您提供关于JSONSerializer自动转义HTML实体的信息。
       $.ajax({
                type:"GET",
                url: "<%= Url.Action("List", "Activity") %>",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(data){
                    $("#aLog").setTemplate($("#templateHolder").html());
                    $("#aLog").processTemplate(data);
                }
            });
        });
$("#aLog").processTemplate(eval("(" + data+ ")"));
$("#aLog").setTemplate($("#templateHolder").html(), [], {filter_data: false});