Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.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
使用JQuery作为ASP.NET嵌入式Web资源_Asp.net_Jquery_Embedded Resource_Webresource - Fatal编程技术网

使用JQuery作为ASP.NET嵌入式Web资源

使用JQuery作为ASP.NET嵌入式Web资源,asp.net,jquery,embedded-resource,webresource,Asp.net,Jquery,Embedded Resource,Webresource,我有一个ASP.NET服务器控件,它依赖于JQuery来实现某些功能。我已尝试添加为webresource 我的问题是我包含jquery文件的方法会将其添加到正文中,或者确切地说是表单中: this.Page.ClientScript.RegisterClientScriptInclude(...) 替代方法是将其作为文本添加到head标记中: LiteralControl include = new LiteralControl(jslink); this.Page.Header.Contr

我有一个ASP.NET服务器控件,它依赖于JQuery来实现某些功能。我已尝试添加为webresource

我的问题是我包含jquery文件的方法会将其添加到正文中,或者确切地说是表单中:

this.Page.ClientScript.RegisterClientScriptInclude(...)
替代方法是将其作为文本添加到head标记中:

LiteralControl include = new LiteralControl(jslink);
this.Page.Header.Controls.Add(include);
但是,问题是头部中使用JQuery的任何现有代码src都会失败,因为JQuery之后会加载(ASP.NET会将文本添加到控件树的底部)


有没有一种实用的方法可以使JQuery成为一种嵌入式资源,但首先加载到头部?或者我应该现在放弃。

如果您想打包jQuery并将其嵌入您自己的服务器控件中,您应该使用ScriptManager将其提供给客户端。从我的头顶上,你必须:

  • 将jQuery.js添加到项目中
  • 在其“建造行动”属性下, 使其成为嵌入式资源
  • 在AssemblyInfo.cs中为您的 控件添加

    [assembly: WebResource("<Your Server Control namespace>.jQuery.js", "application/x-javascript")]
    
    [程序集:WebResource(“.jQuery.js”,“application/x-javascript”)]
    
  • 使您的控件继承自 (或 最少执行)

  • 覆盖GetScriptReferences:

    protected override IEnumerable<ScriptReference>
    GetScriptReferences()
    {
    return new ScriptReference[] { 
        new ScriptReference("<Your Server Control namespace>.jQuery.js", this.GetType().Assembly.FullName),
    };
    }
    
    protectedoverride IEnumerable
    GetScriptReferences()
    {
    返回新的脚本引用[]{
    新的ScriptReference(“.jQuery.js”,this.GetType().Assembly.FullName),
    };
    }
    
  • 您自己的所有客户端脚本都应在以下内部设置:

    protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors()
    
    受保护的重写IEnumerable GetScriptDescriptor()
    

    这将确保依赖项的正确顺序(即jQuery将可用于您自己的客户端脚本)。

    更新:

    一种简单得多的方法是在脚本中动态添加脚本标记,并指向google代码宿主。e、 g

    function include_dom(script_filename) {
        var html_doc = document.getElementsByTagName('head').item(0);
        var js = document.createElement('script');
        js.setAttribute('language', 'javascript');
        js.setAttribute('type', 'text/javascript');
        js.setAttribute('src', script_filename);
        html_doc.appendChild(js);
        return false;
    }
    
    include_dom("http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js");
    
    该函数取自


    Crecentfresh把我推向了正确的方向,我也发现


    我的问题仍然存在,ScriptManager在头部脚本之后添加了引用,但我认为这是一个无法解决的问题。我选择了回答自己的问题,但也对crescentfresh投了更高的票。

    我可以问一下,为什么您不只是将jquery文件添加到项目中,并使用脚本标记引用它?可以这样做,目前就是这样,但想法是服务器控件是自包含的,您可能应该使用jquery noConflict()并在您自己的客户端名称空间中公开它。IE MyNameSpace.$=jQuery.noConflict(),以避免干扰外部页面可能正在使用的$。我必须尝试一下,我们遇到了相同的问题。这将我推向了正确的方向,我还找到了-IScriptControl.GetScriptReferences_方法。尽管如此,我的问题仍然存在,ScriptManager在头中的脚本之后添加引用。