从 ASP .NET 中的服务器组件访问资源

Posted

技术标签:

【中文标题】从 ASP .NET 中的服务器组件访问资源【英文标题】:Accessing resource from server component in ASP .NET 【发布时间】:2010-09-09 07:17:17 【问题描述】:

我是 ASP .NET 开发魔法的初学者,如果这是一个愚蠢的问题,请原谅我。 经过一番谷歌搜索并阅读(一些......)ASP .NET 3.5 Unleashed,我还没有找到一种方法来做我想做的事 - 这通常意味着我正在尝试做一些愚蠢的事情,或者很明显我已经错过了:)

我正在创建一个服务器控件,用于我公司正在开发的多个站点。这没什么花哨的,只是一个标准的在这里你可以编辑和创建用户控件。

这样做自然需要对某些文本进行本地化。

对我来说,这样做的自然方式是使用以某种约定命名的全局资源,然后包含服务器控件的项目可能会填充本地化数据。

但是,我在从我的组件中访问这些资源时遇到了一些问题。

在项目 A 的 App_GlobalResources 文件夹中创建了一个名为 CreateOrEditUserControl.da.resx 的资源文件(旁注:我需要将我的 App_GlobalResources 文件夹添加到 web-config 中吗?)。项目 A 包括来自项目 B 并通过程序集引用加载的 CreateOrEditUserControl。 CreateOrEditUserControl.da.resx 包含映射到字符串 Brugernavn 的键 UserName(这只是丹麦语本地化,您可能已经猜到了...)

在 CreateChildControls() 方法中的控件内(因为我需要本地化字符串),我尝试通过以下方式访问资源:

HttpContext.GetGlobalResource("CreateOrEditUserControl","UserName");
HttpContext.GetGlobalResource("CreateOrEditUserControl.da","UserName");
HttpContext.GetGlobalResource("CreateOrEditUserControl.da.resx","UserName");
HttpContext.GetLocalResource("CreateOrEditUserControl.da.resx","UserName");

前三个返回 null,最后一个抛出异常,因为我没有权限从我的组件中访问所述资源,这似乎是合乎逻辑的。

到目前为止,我不得不求助于“hack”,您可以在其中指定查询字符串中的语言,然后我手动插入字符串。但是,这是不可取的,因为任何更改都需要更改组件,而不仅仅是用户...

这样做的正确方法是什么 - 如果有的话?

提前致谢!

【问题讨论】:

【参考方案1】:

对我来说,这样做的自然方式是使用以某种约定命名的全局资源,然后包含服务器控件的项目可能会填充本地化数据。

我对 ASP.Net 几乎一无所知,但如果我可以在不同页面或各种应用程序中使用通用控件,我会在该控件“内部”包含可翻译资源。这样您就不必为每个项目本地化它,而只需一次。我很确定这在 ASP.Net 中是可能的。

至于访问全局资源(再次抱歉我的知识有限),您可能必须使用 ResourceManager 或 ResourceReader。

【讨论】:

感谢您的回复!在组件中包含资源是很有可能的——但据我所知,并不能解决更大的问题。它仍然不允许组件的用户“注入”他自己的本地化数据?感谢有关 ResourceManager / Reader 的提示 - 我会查一下!

以上是关于从 ASP .NET 中的服务器组件访问资源的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 和组件架构

ASP.NET Core中如何限制响应发送速率(不是调用频率)

ASP.NET 访问Web Service 失败

IIS Express 在调试 ASP.NET MVC 时出现拒绝访问错误

资源服务器中的 ASP.NET 5 JWT 令牌验证

ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限