题
您好,我在使嵌入式 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 的控制过于严厉,并且您说过规则之后的其他所有内容都会为您提供主页。我不太聪明,浪费了一两个小时!
不隶属于 StackOverflow