您好,我在使嵌入式 js 文件正常工作时遇到问题。

我已尝试以下所有方法:

  • 运行 Cassini 开发服务器(VS2008、.NET 3.5)
  • 添加 [集会: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.*"
有帮助吗?

解决方案

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

public class MyScriptManager : System.Web.UI.ScriptManager
{
    protected override void OnInit(EventArgs e)
    {
            base.OnInit(e);
            RegisterClientScriptResource(this, typeof(ScriptManagerExtension), "MyNamespace.MyScriptFile.js");
    }
}

其他提示

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

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

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

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

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

通常这是一个常见问题

此问题的另一个原因 - 您对 Global.asax 的控制过于严厉,并且您说过规则之后的其他所有内容都会为您提供主页。我不太聪明,浪费了一两个小时!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top