Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌入不带ScriptManager的另一个类库中的Javascript资源_C#_Asp.net_Setup Project - Fatal编程技术网

C# 嵌入不带ScriptManager的另一个类库中的Javascript资源

C# 嵌入不带ScriptManager的另一个类库中的Javascript资源,c#,asp.net,setup-project,C#,Asp.net,Setup Project,我正在从头开始创建一个新项目。我在这个web应用程序中有我的web应用程序,我有多个类库的引用 在其中一个库中,我有一些通用的Javascript文件(比如jQuery),我需要将它们加载到web应用程序的母版中。我似乎无法理解Javascript 如何从web应用程序项目访问位于不同类库中的Javascript 附件是一个屏幕截图,以提高清晰度 更新: 有没有办法不用ScriptManager实现这一点?通常嵌入程序集中的资源由该程序集中的控件使用,通过RegisterClientScrip

我正在从头开始创建一个新项目。我在这个web应用程序中有我的web应用程序,我有多个类库的引用

在其中一个库中,我有一些通用的Javascript文件(比如jQuery),我需要将它们加载到web应用程序的母版中。我似乎无法理解Javascript

如何从web应用程序项目访问位于不同类库中的Javascript

附件是一个屏幕截图,以提高清晰度

更新:
有没有办法不用ScriptManager实现这一点?

通常嵌入程序集中的资源由该程序集中的控件使用,通过RegisterClientScript注册,然后通过WebResource.axd处理程序提供给客户端


如果要从程序集中“提取”资源并对其执行某些操作,请使用assembly.GetManifestResourceStream()

如果希望退出使用ScriptManager,但仍保留在DLL中存储库的功能,请尝试以下操作:

  • 在javascript库所在的程序集中创建自定义控件
  • 使用
  • 将控件添加到母版页的页眉(或您喜欢的任何其他位置)
  • 我已经包括了一个如何实现这一点的简短示例

    Mri.Controls中的自定义控件
    使用系统;
    使用System.Collections.Generic;
    使用System.Linq;
    使用System.Web.UI;
    名称空间。控件
    {
    公共类ScriptLoader:控件
    {
    受保护的列表脚本URL;
    公共脚本加载器()
    {
    ScriptUrls=新列表();
    }
    //必须在此处添加库,因为无法从构造函数访问页面对象
    受保护的覆盖无效OnInit(事件参数e)
    {
    碱基.奥尼特(e);
    AddScriptKey(“Mri.Controls.Resources.Scripts.Libraries.jQuery.js”);
    }
    public void AddScriptKey(字符串键)
    {
    //使用程序集位置查找WebResourceUrl
    var webResourceUrl=Page.ClientScript.GetWebResourceUrl(typeof(ScriptLoader),键);
    AddScriptUrl(webResourceUrl);
    }
    公共void AddScriptUrl(字符串url)
    {
    //检查脚本是否已经存在
    如果(!ScriptUrls.Any(s=>s.Equals(url)))
    添加(url);
    }
    受保护的覆盖无效渲染(HtmlTextWriter编写器)
    {    
    //呈现脚本标记
    foreach(ScriptUrls中的变量scriptUrl)
    {
    writer.Write(string.Format(“\n”,scriptUrl));
    }
    }
    }
    }
    
    在Web应用程序的Web.config中添加标记前缀
    
    
    样张
    
    页面标题
    

    我希望这与您所寻找的是一致的。

    我希望控制库可能不仅仅由我使用,因此我希望在那里已经有了标准JS文件,而无需重新设置每个项目。这不是一种标准做法吗?JS文件应该与该程序集相关,如果不是,那么简单的JS文件就可以了。我看到了这种方法——将所有东西都嵌入到程序集中,但使用它需要额外的工作
    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));
                }
            }
        }
    }
    
    <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>