3

嗨,我无法让嵌入式 js 文件正常工作。

我已经尝试了以下所有方法:

  • 运行 Cassini 开发服务器(VS2008,.NET 3.5)
  • 在类的命名空间声明上方添加了[assembly: WebResource("MyNamespace.MyScriptFile.js", "text/javascript")] 。
  • 脚本文件具有构建操作“嵌入式资源”。
  • 尝试在 OnInit、OnLoad 和 OnPreRender 期间注册
  • 脚本文件与注册它的控件位于相同的程序集和命名空间中。
  • 使用反射器打开程序集并验证资源名称是否正确。
  • 使用以下任何方法都不起作用:

    ScriptManager.RegisterClientScriptResource(Page, GetType(), "MyNamespace.MyScriptFile.js");
    
    Page.ClientScript.RegisterClientScriptResource(GetType(), "MyNamespace.MyScriptFile.js");
    
    Page.ClientScript.RegisterClientScriptInclude(GetType(), "key",
        Page.ClientScript.GetWebResourceUrl(GetType(), "MyNamespace.MyScriptFile.js"));
    
    • 正在找到其他 WebResource.axd 文件 - 只有这个没有找到。

对资源的请求返回一个 404 页面,其中列出了一个异常:"*[HttpException]: This is an invalid webresource request.*"

使用 ScriptManager.RegisterClientScriptResource 会产生异常:

"*Web resource 'MyNamespace.MyScriptFile.js' was not found.*"
4

4 回答 4

3

在您的示例代码中,您正在调用 GetType()... 该类型用作搜索的起点。根据您调用 GetType() 的位置,您可能无法获得预期的结果。由于 ASP.NET 为您的页面和自定义控件动态编译类型,因此 GetType() 可能会返回在 ASP.NET 构建的新程序集中定义的类型。

您可以尝试改用 typeof(SomeType) ,其中 SomeType 根据您的资源的位置(例如您正在使用的控件类型)是合适的。

于 2009-11-04T02:35:57.197 回答
2

也许您的资源文件位于项目的文件夹中?如果是这样,您应该在程序集中和注册脚本时指定另一个名称/位置字符串

Page.ClientScript.RegisterClientScriptResource(GetType(), "MyNamespace.Folder1.Folder2.MyScriptFile.js");

[assembly: WebResource("MyNamespace.Folder1.Folder2.MyScriptFile.js", "text/javascript")]

通常这是一个常见问题

于 2009-11-03T11:50:14.153 回答
1

尝试实现您自己的 ScriptManger,然后从那里添加嵌入文件。这是一个例子

public class MyScriptManager : System.Web.UI.ScriptManager
{
    protected override void OnInit(EventArgs e)
    {
            base.OnInit(e);
            RegisterClientScriptResource(this, typeof(ScriptManagerExtension), "MyNamespace.MyScriptFile.js");
    }
}
于 2009-11-02T15:47:08.170 回答
0

这个问题的另一个原因 - 您对 Global.asax 的处理过于沉重,并且您说过您的规则之后的所有其他内容都会为您提供主页。我没那么聪明,浪费了一两个小时!

于 2013-12-17T12:51:40.080 回答