我正在使用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
答案 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)
我找到了一个有效的解决方案:
如果链接在此处死亡,则解决方案为:
创建一个继承自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";
}
}