2011-01-10 2 views
4

Я расширяю поставщика ресурсов asp.net. Проблема заключается в том, что расширенный поставщик ресурсов не обнаруживает культуру страницы. CultureInfo в методе GetObject() всегда имеет значение null.Расширение поставщика ресурсов ASP.NET

Чтобы изменить культуру страницы Я использую ListBox первостепенная InitializeCulture():

protected override void InitializeCulture() 
     { 
      if (Request.Form["ListBox1"] != null) 
      { 
       String selectedLanguage = Request.Form["ListBox1"]; 
       UICulture = selectedLanguage; 
       Culture = selectedLanguage; 
       Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage); 
       Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage); 
      } 
      base.InitializeCulture(); 
     } 

и функция GetObject():

public object GetObject(string resourceKey, CultureInfo culture) 
     { 
      //Call of the data access layer function to retreave the resource value from the database 
      string resourceValue = m_dalc.GetResourceByCultureAndKey(culture, resourceKey); 

      return resourceValue; 
     } 

Это класс поставщика ресурсов:

public class DBResourceProvider : IResourceProvider 
    { 
     #region local variables 

     //We save the classKey (resourceType) in this variable 
     private string m_classKey; 

     //New instance of the data access layer 
     private StringResourcesDALC m_dalc; 

     #endregion 

     #region Constructors 

     /// <summary> 
     /// Constructor that creates a new instance of a resource provider using the resource type 
     /// </summary> 
     /// <param name="classKey">Resource type</param> 
     public DBResourceProvider(string classKey) 
     { 
      this.m_classKey = classKey; 
      m_dalc = new StringResourcesDALC(classKey); 
     } 

     #endregion 

     #region IResourceProvider Members 

     /// <summary> 
     /// Function that is called when we have explicit declarations of local and global resources 
     /// </summary> 
     /// <param name="resourceKey">Key of the resource</param> 
     /// <param name="culture">Culture code</param> 
     /// <returns>Resource value</returns> 
     public object GetObject(string resourceKey, CultureInfo culture) 
     { 
      //Call of the data access layer function to retreave the resource value from the database 
      string resourceValue = m_dalc.GetResourceByCultureAndKey(culture, resourceKey); 

      return resourceValue; 
     } 

     //Property that returns a new resource reader used to get local resources wich have been declared implicitly 
     public System.Resources.IResourceReader ResourceReader 
     { 
      get 
      { 
       //Call of the data access layer function that returns all resource keys and values for a single culture 
       ListDictionary resourceDictionary = this.m_dalc.GetResourcesByCulture(CultureInfo.InvariantCulture); 

       return new DBResourceReader(resourceDictionary); 
      } 

     } 

     #endregion 

    } 

Большое спасибо за ваше время.

ответ

1

Для метода GetObject() не гарантируется, что текущая культура предоставляется ASP.NET. Попробуйте следующее:

public object GetObject(string resourceKey, CultureInfo culture) { 
    if (culture == null) 
    { 
     culture = CultureInfo.CurrentUICulture; 
    } 

    //Call of the data access layer function to retreave the resource value from the database 
    string resourceValue = m_dalc.GetResourceByCultureAndKey(culture, resourceKey); 
    return resourceValue; 
} 
+0

Почему не гарантируется, что текущая культура предоставляется ASP.NET? Почему он может читать ключ ресурса, а не культуру? –

+1

Документы находятся по адресу http://msdn.microsoft.com/en-us/library/system.web.compilation.iresourceprovider.getobject.aspx state «Класс реализации может извлекать свойство CurrentUICulture, если значение для параметра культуры не прошел ». Также проверьте образец там, они также проведут эту проверку. – maartenba

+0

Теперь я понимаю. Спасибо. –

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