我有一个控件,其中包含一些我想从resx文件中获取的文本,我想我可以创建一个名为ControlName.ascx.resx的文件,但这似乎不起作用。
我正在使用
label1.InnerText = (string)GetLocalResourceObject("default");
要从资源文件中获取值,但它会不断引发InvalidOperation异常。
我对resx文件的工作方式是正确的还是仅适用于Pages?
我在aspx页面上使用相同的代码。
答案 0 :(得分:4)
当您从用户控件中调用GetLocalResourceObject
时,您实际上正在调用TemplateControl.GetLocalResourceObject
,这将查找资源文件的错误位置。您需要拨打HttpContext.GetLocalResourceObject
。
protected string HttpContextGetLocalResourceObjectAsString(string message)
{
string path = HttpContext.Current.Request.Path;
return (HttpContext.GetLocalResourceObject(path, message) as string);
}
现在你可以做到
label1.InnerText = HttpContextGetLocalResourceObjectAsString("default");
答案 1 :(得分:0)
根据文件:
获取页面级资源
http://msdn.microsoft.com/en-us/library/system.web.httpcontext.getlocalresourceobject.aspx
编辑 - 添加
将字符串添加到web.config并从那里抓取它可能不那么重要。
<configuration>
<appSettings>
<add key="LoggingSystemId" value="B2F085A9-6EC1-4CBF-AF8B-B17BFA75AD81"/>
<appSettings>
...
引用如下:
logger.SystemId = System.Configuration.ConfigurationManager.AppSettings["LoggingSystemId"];
当然,您需要对System.Configuration dll的引用。
答案 2 :(得分:0)
大约一年后,但我认为这就是你所追求的目标?
var resource = HttpContext.GetLocalResourceObject(TemplateControl.AppRelativeVirtualPath, termType.ToString());
标记答案,如果那是那个!