加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 扩展ASP.NET资源提供程序

发布时间:2020-12-15 21:14:15 所属栏目:百科 来源:网络整理
导读:我正在扩展asp.net资源提供程序. 问题是扩展资源提供程序未检测到页面文化. GetObject()方法中的CultureInfo始终为null. 要更改页面文化,我使用列表框重写InitializeCulture(): protected override void InitializeCulture() { if (Request.Form["ListBox1"
我正在扩展asp.net资源提供程序.
问题是扩展资源提供程序未检测到页面文化.
GetObject()方法中的CultureInfo始终为null.

要更改页面文化,我使用列表框重写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,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

    }

非常感谢您的宝贵时间.

解决方法

对于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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读