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

时间:2015-06-11 09:50:28

标签: c# module localization dotnetnuke

我正在使用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

2 个答案:

答案 0 :(得分:1)

我可以在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);
}

答案 1 :(得分:0)

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

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";
}
}