Почему код HTML в моем ответе JSON кодируется? - PullRequest
2 голосов
/ 22 июня 2010

Я использую это сообщение в качестве руководства , подробно описывающее, как использовать jQuery с jTemplates для вставки ответа JSON в шаблон.

Моя проблема в том, что один из возвращенныхполя (с именем Description) содержат HTML, но скобки HTML кодируются в \ u003C и \ u003e.

Вот HTML-код (в поле Description), который возвращает сервер:

<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>

Вот как выглядит ответ JSON:

[{"TypeOfActivity":"0","Description":"\u003ca href=\"/en/Yokota/User/Show/YokotaTour\"\u003eYokotaTour\u003c/a\u003e posted \u003ca href=\"/en/Yokota/Ad/Show/166\"\u003eOne of the best for sure\u003c/a\u003e for sale @\u003ca href=\"/en/Yokota\"\u003eYokota\u003c/a\u003e","DateHappened":"6/23/2010 12:26:55 AM"}]

Обратите внимание на «\ u003c» или «\ u003e».Они выглядят как юникод, но почему это происходит?Вот jQuery, выполняющий вызов ответа JSON:

$.getJSON("<%= Url.Action("List", "Activity") %>",
    function(data){
        $("#aLog").setTemplate($("#templateHolder").html());
        $("#aLog").processTemplate(data);
    });

UPDATE

И вот как выглядит источник, когда страница полностью загружена (View> Page Source in Firefox):

&lt;a href="/en/Yokota/User/Show/Chad"&gt;Chad&lt;/a&gt; updated their ad, &lt;a href="/en/Yokota/Ad/Show/100"&gt;Validation Test Ad Again&lt;/a&gt;, @&lt;a href="/en/Yokota"&gt;Yokota&lt;/a&gt;

Может быть, потому, что приближается 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);
}

Ответы [ 3 ]

3 голосов
/ 23 июня 2010

Оказывается, проблема была с настройкой в ​​jTemplates. Строка setTemplate должна быть такой:

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

В частности, для filter_data нужно было установить значение false. По умолчанию jTemplates кодирует HTML. ; (

0 голосов
/ 22 июня 2010

JSONSerializer автоматически экранирует символы "<" и ">" с помощью escape-последовательностей Юникода.

jQuery должен иметь возможность нормально их анализировать.Вы используете метод $ .getJSON, который, как я думал, автоматически оценивает ответ как json и удаляет его, так что я немного озадачен тем, почему в окончательном выводе по-прежнему содержатся escape-коды.

Если выdo:

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

это решает проблему?

0 голосов
/ 22 июня 2010

выполните такие проверки в примере с "contentType" в utf8 ваш пример

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