Встраивание ресурса Javascript, расположенного в другой библиотеке классов, без ScriptManager - PullRequest
3 голосов
/ 18 марта 2011

Я создаю новый проект с нуля. У меня есть веб-приложение в этом веб-приложении. У меня есть ссылки, настроенные для нескольких библиотек классов.

В одной из этих библиотек у меня есть несколько общих файлов Javascript (например, jQuery), которые мне нужно загрузить в мастер-лист моего веб-приложения. Кажется, я не могу понять Javascript.

Как я могу получить доступ к этому Javascript, расположенному в другой библиотеке классов, из моего проекта веб-приложения?

Прикрепленный снимок экрана для большей ясности.

enter image description here

Обновление: Есть ли способ добиться этого без использования ScriptManager?

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Если вы хотите отказаться от использования ScriptManager, но при этом сохраняете возможность хранить библиотеки в вашей DLL, попробуйте следующее:

  1. Создайте пользовательский элемент управления в сборке, где находится ваша библиотека javascriptпостоянно.
  2. Использовать ClientScriptManager.GetWebResourceUrl ()
  3. Добавить элемент управления заголовком вашей главной страницы (или где-либо еще вам нравится)

Я включил короткий пример того, как этого добиться.

Пользовательский элемент управления в Mri.Controls

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI;

namespace Mri.Controls
{
    public class ScriptLoader : Control
    {
        protected List<string> ScriptUrls;

        public ScriptLoader()
        {
            ScriptUrls = new List<string>();
        }

        // Have to add libraries here because cannot access the Page object from the Constructor
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            AddScriptKey("Mri.Controls.Resources.Scripts.Libraries.jQuery.js");
        }

        public void AddScriptKey(string key)
        {
            //  Using the assembly location, find the WebResourceUrl
            var webResourceUrl = Page.ClientScript.GetWebResourceUrl(typeof(ScriptLoader), key);
            AddScriptUrl(webResourceUrl);
        }

        public void AddScriptUrl(string url)
        {
            //  Check to see if script already exists
            if (!ScriptUrls.Any(s => s.Equals(url)))
                ScriptUrls.Add(url);
        }

        protected override void Render(HtmlTextWriter writer)
        {    
            //  Render the script tags
            foreach (var scriptUrl in ScriptUrls)
            {
                writer.Write(string.Format("\n<script type=\"text/javascript\" src=\"{0}\"></script>", scriptUrl));
            }
        }
    }
}

Добавьте TagPrefix в ваш Web.config в вашем веб-приложении

<pages>
    <controls>
        <add tagPrefix="mri" namespace="Mri.Controls" assembly="Mri.Controls"/>
    </controls>
  </pages>

Образец мастер-листа

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Page Title</title>
    <mri:ScriptLoader id="scriptLoader" runat="server" />
</head>
<body>
    <form id="form1" runat="server">
        <asp:ContentPlaceHolder ID="cphBody" runat="server" />
    </form>
</body>
</html>

Надеюсь, это соответствовало тому, что вы искали.

0 голосов
/ 18 марта 2011

Обычно ресурсы, встроенные в сборку, используются элементами управления в этой сборке, регистрируются через RegisterClientScript и затем передаются клиенту с помощью обработчика WebResource.axd

, если вы хотите «извлечь» ресурс из сборки и сделать что-тоэто, используйте Assembly.GetManifestResourceStream ()

...