自定义ASP.net控件的资源文件(.ascx)InvalidOperationException

时间:2010-01-08 17:21:33

标签: asp.net resources

我有一个控件,其中包含一些我想从resx文件中获取的文本,我想我可以创建一个名为ControlName.ascx.resx的文件,但这似乎不起作用。

我正在使用

label1.InnerText = (string)GetLocalResourceObject("default");

要从资源文件中获取值,但它会不断引发InvalidOperation异常。

我对resx文件的工作方式是正确的还是仅适用于Pages?

我在aspx页面上使用相同的代码。

3 个答案:

答案 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());

标记答案,如果那是那个!