1

我有一个自定义控件,其中包含一个网络资源。

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

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

在我的自定义控件中,我在覆盖的 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 文件中的任何函数都没有包含/定义在我的消费页面中。

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

4

3 回答 3

3

我刚刚遇到了同样的问题,找出修复方法是一场噩梦。我终于弄明白了,感谢这个链接

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

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

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

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

于 2010-03-03T17:04:50.613 回答
1

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

使用this.GetType()可能会出现嵌入资源的问题(如 Rick Strahl 所述

在我看来,其他一切都很好。

于 2010-02-04T21:41:51.537 回答
1

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

于 2010-02-05T14:06:46.393 回答