在 c# 中从其他资源中引用嵌入式资源
Posted
技术标签:
【中文标题】在 c# 中从其他资源中引用嵌入式资源【英文标题】:Referencing Embedded resources from other resources in c# 【发布时间】:2010-09-07 23:18:22 【问题描述】:在我的 Web 应用程序中,我将所有 javascript 作为 js 文件包含在程序集中的嵌入资源中,并使用 ClientScriptManager.GetWebResourceUrl()
将它们添加到页面中。但是,在我的一些 js 文件中,我引用了其他静态资产,例如图像 url。我也想制作这些组装资源。有没有办法标记对资源的引用?例如
this.drophint = document.createElement('img');
this.drophint.src = '/_layouts/images/dragdrophint.gif';
可能变成这样:
this.drophint = document.createElement('img');
this.drophint.src = 'resource:assembly.location.dragdrophint.gif';
【问题讨论】:
【参考方案1】:我建议您将 Web 资源作为动态 javascript 关联数组发出。
服务器端代码:
StringBuilder script = new StringBuilder();
script.Append("var imgResources = ;");
script.AppendFormat("imgResources['0'] = '1';",
"drophint",
Page.ClientScript.GetWebResourceUrl(Page.GetType(), "assembly.location.dragdrophint.gif"));
script.AppendFormat("imgResources['0'] = '1';",
"anotherimg",
Page.ClientScript.GetWebResourceUrl(Page.GetType(), "assembly.location.anotherimg.gif"));
Page.ClientScript.RegisterClientScriptBlock(
Page.GetType(),
"imgResources",
script.ToString(),
true);
那么您的客户端代码如下所示:
this.drophint = document.createElement('img');
this.drophint.src = imgResources['drophint'];
this.anotherimg = document.createElement('img');
this.anotherimg.src = imgResources['anotherimg'];
希望这会有所帮助。
【讨论】:
【参考方案2】:我并不特别关心@Jon 建议的确切实现,但它背后的想法是合理的,我同意发布这些将是一件好事。
一个稍微好一点的实现,虽然这在某种程度上都是主观的,但会创建一个服务器端模型(阅读:C# class(es))来表示这个字典(或者简单地使用 Dictionary
【讨论】:
【参考方案3】:我同意 Jason 对我提出的初始解决方案的评估,它绝对可以改进。我的解决方案代表了一种老派的 javascript 心态(阅读,在 ajax 和 JSON 出现之前)。总有更好的方法来解决问题,这也是 *** 如此酷的原因之一。总的来说,我们比任何人都更擅长编程。
根据 Jason 的想法,我会修改我的初始代码,并修改 Jason 建议的一些内容。实现一个具有两个属性的C#
类,img
资源id
和一个包含WebResourceUrl
的属性。然后,我与 Jason 的一些不同之处在于,我建议使用 List<MyImageResourceClass>
,而不是使用 Dictionary<string, string>
,然后您可以将其序列化为 JSON(使用 DataContractJsonSerializer),并将 JSON 作为动态脚本,而不是使用字符串生成器手动生成 javascript。
为什么是列表?我认为您可能会在序列化为 JSON 时找到字典,至少使用DataContractJsonSerializer
(仅供参考,仅适用于 3.5 框架,使用 2.0 或 3.0 框架,您需要使用 aspnet ajax 并使用 JSON 序列化程序),使用起来比列表如何序列化要麻烦一些。虽然这是主观的。
您的客户端代码也有影响。现在在客户端,您将拥有一个 JSON 序列化 MyImageResourceClass 实例的数组。你需要遍历这个数组来创建你的img
标签。
希望这些想法和建议可以帮助您前进!毫无疑问,还有其他解决方案。我有兴趣看看会发生什么。
【讨论】:
以上是关于在 c# 中从其他资源中引用嵌入式资源的主要内容,如果未能解决你的问题,请参考以下文章