我有一个自定义控件,其中包含一个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文件中的所有功能都没有包含在我的消费页面中。
我错过了一些明显的东西吗?
答案 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
,现在它可以正常工作。