2010-01-08 7 views
1

У меня есть элемент управления, содержащий некоторый текст, который я хочу получить из файла resx. Я думал, что могу просто создать файл с именем ControlName.ascx.resx, но это похоже, не работает.Файл ресурсов для пользовательского элемента управления ASP.net (.ascx) InvalidOperationException

Я использую

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

Чтобы получить значение из файла ресурсов, но он продолжает бросать вверх по InvalidOperation Exception.

Я прав, как работают файлы resx или работает только на страницах?

У меня такой же код работает на странице aspx.

+0

Я обновил свой ответ на основе вашего комментария – David

+0

Я понимаю, откуда вы пришли, но идея resx заключается в том, что я могу глобализовать контент, если это значение размещения в конфигурации не является действительно и опцией. – Morgeh

ответ

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"); 
+0

Это решение отлично работает, если вы хотите сохранить строку ресурса в локальном файле ressource страницы. Если вы хотите сохранить его отдельно от страницы (например, если вы не хотите повторять строки для каждой страницы, но определяете ее только один раз - скажем, для элемента управления меню), я описал другое решение [здесь] (http: //stackoverflow.com/a/15339537/1016343). – Matt

0

За документации:

Gets a page-level resource

http://msdn.microsoft.com/en-us/library/system.web.httpcontext.getlocalresourceobject.aspx

Edit- добавил

Это может быть меньше работы, чтобы просто добавить строку в web.config и захватить его оттуда.

<configuration> 
    <appSettings> 
    <add key="LoggingSystemId" value="B2F085A9-6EC1-4CBF-AF8B-B17BFA75AD81"/> 
    <appSettings> 
... 

ссылка выглядит следующим образом:

logger.SystemId = System.Configuration.ConfigurationManager.AppSettings["LoggingSystemId"]; 

Конечно, вам нужна ссылка на DLL System.Configuration.

+0

no joy дает мне следующую ошибку компиляции: Невозможно получить доступ к защищенному члену 'System.Web.UI.TemplateControl.GetLocalResourceObject (string)' через квалификатор типа 'System.Web.UI.Page'; квалификатор должен быть типа «Controls_NavigationMenu» (или получен из него) – Morgeh

0

через год или чуть позже, но я думаю, что это то, что вы после этого?

var resource = HttpContext.GetLocalResourceObject(TemplateControl.AppRelativeVirtualPath, termType.ToString()); 

Отметьте ответ, если это тот!

Смежные вопросы