Печать JSON с C # asp.net - PullRequest
       4

Печать JSON с C # asp.net

2 голосов
/ 22 апреля 2011

Хорошо, у меня есть некоторый код jQuery, который отправит запрос AJAX в файл aspx.

Мой файл Spellchecker.aspx выглядит следующим образом:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Spellchecker.aspx.cs" Inherits="Spellchecker" %>
<head id="Head1" runat="server" />

Мне пришлось поместить этот тег «head», в противном случае я получаю сообщение об ошибке « , что неверно, поскольку код должен просто возвращать данные json.

В файле aspx.cs яЯ возвращаю словарь, преобразованный в json в Page_Load:

dict.Add("just_json", json_obj);
JavaScriptSerializer serializer = new JavaScriptSerializer(); //creating serializer instance of JavaScriptSerializer class
string json = serializer.Serialize((object)dict);

Response.Write(json);
}

Итак, в окне предупреждения я вижу данные json, за которыми следует

Как сделать так, чтобы из aspx возвращались только данные JSON?

ОБНОВЛЕНИЕ: Мне кажется, я понял это. Помещение темы = "" в "%Страница »в файле aspx, кажется, отключить тему!

Ответы [ 2 ]

5 голосов
/ 22 апреля 2011

Чтобы ответить на ваш актуальный вопрос «зачем мне нужен элемент head» - потому что именно здесь ASP.NET помещает ваши ссылки на CSS и некоторые импорты JavaScript.

Непонятно, что именно вы пытаетесь сделать здесь, но похоже, что вы, вероятно, хотите создать веб-сервис или представить метод как ScriptMethod. Странно использовать страницу ASPX для вывода ответа на запрос AJAX.

Просмотр ScriptMethods или HttpHandlers .

HttpHandlers позволяет полностью управлять ответом. Таким образом, вы должны создать обработчик и подключить его к «SpellChecker.ashx», и обработчик сможет записывать напрямую в поток ответов.

public class SpellCheckerHttpHandler : IHttpHandler
{
    public bool IsReusable { get { return true; } }

    public void ProcessRequest(HttpContext context)
    {
        //Write out the JSON you want to return.
        string json = GetTheJson();

        context.Response.ContentType = "application/json";
        context.Response.Write(json);
    }
}

А затем в вашем Web.Config внутри элемента system.webServer добавьте:

<handlers>
    <add name="SpellChecker" path="~/SpellChecker.ashx" type="MyNamespace.HttpHandlers.SpellCheckerHttpHandler, MyAssembly" />
</handlers>

Теперь вы можете сделать запрос к вашему обработчику, например http://localhost/SpellChecker.ashx?TextToCheck=xyz.

1 голос
/ 22 апреля 2011

Если все, что делает ваша страница - это обработка ввода и вывода JSON, рассмотрите возможность использования страницы «Общий обработчик», заканчивающейся на ashx, вместо «Веб-страницы», заканчивающейся на asmx.У него намного меньше накладных расходов, и он не будет пытаться загружать темы и т. Д.

Вы можете получить его для вывода JSON вместо XML или чего-то еще, управляя выводом Content-Type:

context.Response.ContentType = "application/json";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...