WebResource是空白页面

时间:2010-02-04 21:29:03

标签: c# asp.net javascript webresource.axd

我有一个自定义控件,其中包含一个webresource。

webresource是一个javascript文件,我在javascript文件上的构建选项设置为“Embedded Resource”,我的AssemblyInfo.cs中有以下代码行,用于我的自定义控件所在的项目:

// Export the MultiSelectGridView.js file
[assembly: WebResource("SOM.DCO.CustomWebControls.MultiSelectGridView.js", "application/x-javascript")]

在我的自定义控件中,我在overriden onload事件中有以下几行:

private const string MULTISELECTGRIDVIEW_JS = "SOM.DCO.CustomWebControls.MultiSelectGridView.js";
Type t = this.GetType();
                string url = Page.ClientScript.GetWebResourceUrl(t, MULTISELECTGRIDVIEW_JS);
                if (!Page.ClientScript.IsClientScriptIncludeRegistered(t, MULTISELECTGRIDVIEW_JS))
                    Page.ClientScript.RegisterClientScriptInclude(t, MULTISELECTGRIDVIEW_JS, url);

我也尝试了以下内容:

private const string MULTISELECTGRIDVIEW_JS = "SOM.DCO.CustomWebControls.MultiSelectGridView.js";
if (!Page.ClientScript.IsClientScriptIncludeRegistered(t, MULTISELECTGRIDVIEW_JS))
                    Page.ClientScript.RegisterClientScriptResource(t, MULTISELECTGRIDVIEW_JS);

不幸的是,无论我做什么,我得到的网络资源都是空白的,因此我的javascript文件中的所有功能都没有包含在我的消费页面中。

我错过了一些明显的东西吗?

3 个答案:

答案 0 :(得分:3)

我刚才遇到了同样的问题,弄清楚修复是一场噩梦。我终于明白了,感谢this link

如果在解决方案资源管理器中右键单击解决方案名称,然后选择“属性”,则会看到“默认命名空间”的文本框。

此默认命名空间值必须与您放在Web资源前面的命名空间相同。

因此,如果属性中的默认名称空间仅为“SOM”或仅为“CustomWebControls”,则需要将其更改为“SOM.DCO.CustomWebControls”。

然后在“assembly:WebResource”中使用相同的完整命名空间,并调用RegisterClientScriptInclude(或RegisterClientScriptResource,或者用于附加Web资源的任何方法。

答案 1 :(得分:1)

我过去遇到的唯一问题是在调用GetWebResourceUrl时传递了错误的Type。您必须让Type成为Type来自与嵌入式资源相同的程序集。

使用this.GetType()可能会出现嵌入资源(as described by Rick Strahl

的问题

其他一切看起来都不错。

答案 2 :(得分:1)

事实证明,即使我的javascript位于“命名空间”SOM.DCO.CustomWebControls中,它也位于名为“MultiSelectGridView”的文件夹中。 所以我将所有对它的引用都从SOM.DCO.CustomWebControls.MultiSelectGridView.js更改为SOM.DCO.CustomWebControls.MultiSelectGridView.MultiSelectGridView.js,现在它可以正常工作。