Как я могу вывести XML из кода в файл ASPX? - PullRequest
2 голосов
/ 19 февраля 2010

Мне нужно вывести XML / ASX на страницу ASPX.XML генерируется из кода и будет выглядеть следующим образом .

Я использую конструктор строк для создания XML / ASX.

            (...)
            sb.AppendLine("<asx version='3.0'>");
            sb.AppendLine("<title> Spilliste </title>");
            while (i < pdc.Count)
            {
                sb.AppendLine("<entry>");
                sb.AppendLine("<title>" + pdc[i].PageName + "</title>");
                sb.AppendLine("<abstract> Ikke tilgjengelig</abstract>");
                sb.AppendLine("<ref>" + pdc[i].LinkURL + "</ref>");
                sb.AppendLine("</entry>");
                i++;
            }
            sb.AppendLine("</asx>");

            return sb.ToString();
            (...)

Но какя могу вывести это?

Response.Write не работает из кода позади.И я примечателен использованием <asp:label> в файле ASPX, потому что он должен быть помещен в теги.У меня в основном пустая страница ASPX.

Что делать?

Ответы [ 4 ]

4 голосов
/ 19 февраля 2010

Не используйте Page для этого. В основном Page s для рендеринга HTML. Если вы хотите отправить xml или изображения или любой другой тип данных по этому вопросу, вы должны использовать файл .ashx и класс, который реализует IHttpHandler.

Вы можете увидеть этот пример о том, как реализовать интерфейс.

0 голосов
/ 28 ноября 2012
    Response.ClearHeaders();
    Response.ContentType = "text/xml;charset=UTF-8";
    string xmlString = "<aaa>sai</aaa>";
    Response.Write(xmlString);
    Response.End();
0 голосов
/ 19 февраля 2010

Вы должны использовать IHttpHandler для этого - вы можете настроить, какой URL он обрабатывает или с помощью , создавая .ashx файл (очень простой) или путем регистрации их в web.config файле , который является более гибким, но более хитрым, поскольку синтаксис различается между классическим и интегрированным режимом IIS.

Тогда вам понадобится простой класс с одним важным членом - методом ProcessRequest, принимающим только один параметр - HttpContext.

Кроме того, избегайте использования StringBuilder для создания XML. Вместо этого вы можете использовать более безопасные и более гибкие классы linq to xml: использование этого типа-безопасного подхода также облегчает написание way вспомогательных методов для правильной генерации частей дерева xml; и вы можете запросить и преобразовать результаты для загрузки.

void ProcessRequest(HttpContext context) {
    var pdc = Enumerable.Range(0,10).Select(
        i=>new{PageName="Page"+i,LinkURL="Link"+i});                

    var xmlString = 
    new XElement("asx",
        new XAttribute("version","3.0"),
        new XElement("title","Spilliste"),
        pdc.Select(pdcElem=>
            new XElement("entry",
                new XElement("title",pdcElem.PageName),
                new XElement("abstract","Ikke tilgjengelig"),
                new XElement("ref",pdcElem.LinkURL)
            )
        )
    ).ToString(SaveOptions.DisableFormatting);

    //don't forget to handle headers and set things like content-type too!
    context.Response.Write(xmlString);
}

Причина, по которой этот подход лучше взлома файла .aspx, заключается в том, что, хотя это возможно в файле .aspx, вам придется бороться с фреймворком, чтобы получить его - целая куча инфраструктуры будет мешать вам, возможно, тонко искажать вывод, прежде чем он достигнет клиента. Самый простой способ избавиться от этого - использовать более простой обработчик, который специально не предназначен для размещения элементов управления aspx и генерации HTML.

0 голосов
/ 19 февраля 2010

Response.Write должен работать из кода позади:

  Response.Write("some test");
  Response.Flush();

Но вы должны выполнить этот код в методе Page_Load. Вы должны подготовить отдельную страницу aspx для генерации XML и перенаправить пользователя на эту страницу. Эта страница должна быть пустой (только <%@ ... %> в файле aspx).

...