dotnetnuke localresourcefile不会为动态加载的控件返回资源文件名

本文关键字:控件 返回 资源 文件名 加载 动态 localresourcefile dotnetnuke | 更新日期: 2023-09-27 17:55:06

我使用的是DNN 7.04。

我正在尝试从资源文件中获取字符串,并尝试了以下操作:

var path1 = Localization.GetString("MyAdsPath.Text", LocalResourceFile);
var path2 = Localization.GetString("MyAdsPath.Text", LocalResourceFile + "/AdditionalInfo.ascx.resx");

path1返回null,path2从资源文件返回正确的字符串。

在这两种情况下,LocalResourcfile都返回:

/desktopmodules/qEmployerCreateAd/App_LocalResources/

问题是我不想硬编码资源文件名,因为当语言改变时,它会改变。

我认为问题在于控件是动态加载的。我必须检查区域性,然后硬编码资源文件名吗?或者有更好的解决方案吗?

谢谢Norb

dotnetnuke localresourcefile不会为动态加载的控件返回资源文件名

我的解决方案可以在DNNSimpleArticle 中找到

但基本上,当加载动态控制时,您只需要将模块配置从父级传递给它

try
{
    var controlToLoad = "Controls/ArticleList.ascx";
    if (ArticleId > 0)
        controlToLoad = "Controls/ArticleView.ascx";
    var mbl = (dnnsimplearticleModuleBase)LoadControl(controlToLoad);
    mbl.ModuleConfiguration = ModuleConfiguration;
    mbl.ID = System.IO.Path.GetFileNameWithoutExtension(controlToLoad);
    phViewControl.Controls.Add(mbl);
}
catch (Exception exc) //Module failed to load
{
    Exceptions.ProcessModuleLoadException(this, exc);
}

我找到了一个有效的解决方案:

http://weblogs.asp.net/anasghanem/fixing-dotnetnuke-localization-for-child-and-dynamically-loaded-usercontrols

如果链接死亡,这里是解决方案:

创建一个从PortalModuleBase继承的UserCotrol基类,并修复LocalResourceFile,如下所示:

public partial class BaseUserControl :  DotNetNuke.Entities.Modules.PortalModuleBase
{
// basicly this will fix the localization issue 
protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    string FileName =  System.IO.Path.GetFileNameWithoutExtension(this.AppRelativeVirtualPath);
    if (this.ID != null)
        //this will fix it when its placed as a ChildUserControl 
        this.LocalResourceFile = this.LocalResourceFile.Replace(this.ID, FileName);
    else
        // this will fix it when its dynamically loaded using LoadControl method 
        this.LocalResourceFile = this.LocalResourceFile + FileName + ".ascx.resx";
}
}