无法找到WebResources的原因

时间:2009-10-27 03:57:47

标签: asp.net webresource

您好我无法使用嵌入式js文件。

我尝试了以下所有方法:

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

    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 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

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

通常这是一个常见的问题

答案 2 :(得分: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");
    }
}

答案 3 :(得分:0)

这个问题的另一个原因 - 你的Global.asax太过沉重了,你已经说过规则之后的其他一切都会给你主页。对我来说不是那么聪明,浪费了一两个小时!