Получить список ссылок на скрипты, которые зарегистрированы в asp: ScriptManager - PullRequest
2 голосов
/ 19 января 2011

Мой asp.net ScriptManager выводит множество ссылок на сценарии AXD в моем HTML:

<script src="/ScriptResource.axd?d=B073McDWctL8Kxw1sTGlGNcf...
<script src="/ScriptResource.axd?d=2WiTJxV_YZ2N4lJaAfSKnBVu...
<script src="/ScriptResource.axd?d=jSiywqe6yJ5PAsxeca407Xxb...
...about 4 more ...

Теперь я понимаю, что эти зашифрованные строки запросов представляют ссылки на сценарии, например, сборку и имя.Я хочу получить этот список зарегистрированных сценариев, чтобы добавить их в свой составной сценарий следующим образом:

<asp:ScriptManager runat="server">
  <CompositeScript>
    <Scripts>
        <asp:ScriptReference Name="Something.js" Assembly="System.Something" />
    </Scripts>
  </CompositeScript>  
</asp:ScriptManager>

Я пробовал следующий код, чтобы получить список зарегистрированных сценариев, но он всегдапо какой-то причине возвращает ноль скриптов, что я делаю не так?

protected override void Render(HtmlTextWriter output)
{
  var sm = ScriptManager.GetCurrent(this);
  foreach (ScriptReference s in sm.Scripts)
  {
    string debug = s.Assembly + ">" + s.Name + ";" + s.Path;
  }

  base.Render(output);
}

1 Ответ

3 голосов
/ 19 января 2011

Хорошо, я написал этот код, вдохновленный (http://aspnet.codeplex.com/releases/view/13356), который делает трюк и выводит список ссылок на скрипты, которые мне нужно добавить в мой скрипт-менеджер:

protected override void OnInit(EventArgs e)
{
  base.OnInit(e);
  ScriptManager.GetCurrent(this)
    .ResolveScriptReference += new EventHandler<ScriptReferenceEventArgs>(ResolveScriptReferenceHandler);
}

List<string> ScriptRefs = new List<string>();
private void ResolveScriptReferenceHandler(object sender, ScriptReferenceEventArgs e)
{
  ScriptRefs.Add("<asp:ScriptReference Name=\"" + e.Script.Name + "\" Assembly=\"" + e.Script.Assembly + "\" />");
}

protected override void Render(HtmlTextWriter output)
{
  base.Render(output);
  string debug = string.Join("\r\n", ScriptRefs.Distinct());
}

Проще говоряэтот код в вашем классе Page и установите точку останова в строке 'string debug = ...', чтобы проверить, какие сценарии необходимы.Сладкое.

...