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
我的解决方案可以在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";
}
}