Визуализация страницы в пользовательский вывод - PullRequest
0 голосов
/ 31 января 2011

Давайте возьмем обычную страницу aspx, ~ / admin / template.aspx

Например, в папке администратора разрешены только роли «Администратор».

Теперь я не хочузапустите template.aspx как обычно, но я хочу, чтобы он вызывался из активного процесса.Допустим, я нахожусь на ~ / admin / buildMyStuff.aspx и там я собираю некоторые данные, теперь у меня есть строка запроса, например "? Do = this $ andDo = that $ index = {0}".Теперь я хочу, используя этот шаблон, пройтись по моим данным и сгенерировать результат, поместив его, например, в статический html или в текстовый файл или что-то еще.

Как мне это сделать?Вызываете это как новый запрос, ожидая ответа?Что мне нужно сделать, чтобы он работал под ролью «Администратор», или он делает это автоматически, так как я уже являюсь администратором?

Или есть другая возможность, которая позволяет мне запускать страницу шаблонаи указав мой пользовательский htmltextwriter в качестве вывода?

РЕДАКТИРОВАТЬ:

public static string RenderPageAndGetHtml(string pageUrl, string pageQuery)
    {
        var sw = new StringWriter();
        var wr = new SimpleWorkerRequest(pageUrl, pageQuery, sw);
        HttpRuntime.ProcessRequest(wr);
        sw.Close();
        return sw.ToString();
    }

Это решение.

НО:

Похоже, что SimpleWorkerRequest получил ошибку

: происходит следующее:

~ / default.aspx Fails

/ default.aspx Fails

default.aspx Ok

en / default.aspx Fails

/ en / default.aspx Fails

~ / en / default.aspx Fails

РЕДАКТИРОВАТЬ:

Хорошо, я реализовал мой пользовательский запрос HttpWorkerRequest.Теперь это работает ...

Спасибо

Ответы [ 3 ]

1 голос
/ 21 февраля 2011

Следует отметить, что SimpleWorkerRequest не принимает URL-адрес в качестве входного, а путь ... я потратил на это несколько часов, и это в основном означает, что en/default.aspx будет переводиться в

  • страница: ru
  • pathInfo: default.aspx

вам необходимо использовать обратную косую черту как в пути

en\default.aspx
1 голос
/ 31 января 2011

Вам нужен HTML-код страницы template.aspx?Попробуйте эту функцию, может быть, это то, что вам нужно:

public static string RenderPageAndGetHtml(string pageUrl, string pageQuery)
    {
        var sw = new StringWriter();
        var wr = new SimpleWorkerRequest(pageUrl, pageQuery, sw);
        HttpRuntime.ProcessRequest(wr);
        sw.Close();
        return sw.ToString();
    }
0 голосов
/ 01 февраля 2011

Хорошо, я нашел UTF8WorkerRequest, но это было только для установки SimpleWorkerRequest в кодировку UTF8 (это внутреннее UTF16). Извините!

public class UTF8WorkerRequest : SimpleWorkerRequest 
{

    private TextWriter theWriter;

    public UTF8WorkerRequest(string page, string query, TextWriter output) : base(page, query, output)
    {
        theWriter = output;
    }

    public UTF8WorkerRequest(string appVirtualDir, string appPhysicalDir, string page, string query, TextWriter output) : base(appVirtualDir, appPhysicalDir, page, query, output)
    {
        theWriter = output;
    }

    public override void SendResponseFromMemory(byte[] data, int length)
    {

        theWriter.Write(System.Text.Encoding.UTF8.GetString(data));

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...