HttpModule для записи сценариев JavaScript Ссылки на ответ - PullRequest
1 голос
/ 11 марта 2010

На своей странице в событии Page_Load я добавляю коллекцию строк в объект Context. У меня есть HttpModule, который будет запускать EndRequest и извлекать коллекцию строк. Затем я пишу тег ссылки на скрипт (на основе набора строк) в ответ. Проблема в том, что страница читает ссылку на скрипт, но не получает содержимое файла (я думаю, это происходит в событии EndRequest). Я не могу запустить событие BeginRequest, потому что у меня не будет доступа к коллекции Context Items.

Я также пытался зарегистрировать HttpHandler, который обрабатывает запрос ссылки на скрипт, но не могу получить доступ к коллекции строк в Context.Items оттуда Есть предложения?

Page_Load:

protected void Page_Load(object sender, EventArgs e)
    {
        Context.Items.Add("ScriptFile", "/UserControls.js");
    }

HttpModule:

public void OnEndRequest(Object s, EventArgs e)
    {
        HttpApplication app = s as HttpApplication;
        object script = app.Context.Items["ScriptFile"];
        app.Response.Write("<script type='text/javascript' src='" + script + "'></script>");
    }

Ответы [ 2 ]

0 голосов
/ 12 марта 2010

Если каждая ссылка указывает на определенный скрипт, я бы использовал ClientScriptManager в Page_Load каждой страницы.

if(!ClientScript.IsClientScriptIncludeRegistered("ScriptFile"))
{
     ClientScript.RegisterClientScriptInclude("ScriptFile", "/UserControls.js");
}

Если вам нужно рассчитать сценарии для ссылки на основе более чем одного ключа или какого-либо другого фактора, неизвестного на каждой странице, то посмотрите ответ № 2 в на этот вопрос .

0 голосов
/ 11 марта 2010

Во-первых, я вполне уверен, что это недопустимое место для размещения тегов.

Во-вторых, почему вы заново изобретаете колесо? У вас уже есть ScriptManager и хорошо зарекомендовавшие себя способы внедрения кода скрипта в вывод ASP.NET. Почему это должно происходить во время EndRequest? Это, вероятно, следует обрабатывать на уровне страницы.

...