访问添加到DNN模块的用户控件的资源文件的正确方法是什么?

时间:2016-04-20 18:03:15

标签: c# webforms dotnetnuke resx

我正在使用Christoc模块模板,尝试创建一个带有本地化文本的模块。我在项目中添加了一个名为 TeamList.ascx 的新用户控件,并在 App_LocalResources 文件夹中添加了两个新文件:

TeamList.ascx.resx TeamList.ascx.fr-CA.resx (加拿大法语)。

我可以在我的视图中包含用户控件而没有任何问题,但是当模块加载到页面上时,包含本地化文本的所有位置都是空白的。

尝试通过包含以下内容来注册用户控件:

<moduleControl>
   <controlKey>Teams</controlKey>
   <controlSrc>
      DesktopModules/LTSC_DashboardModule/TeamList.ascx
   </controlSrc>
   <supportsPartialRendering>False</supportsPartialRendering>
   <controlTitle>Team Control</controlTitle>
   <controlType>View</controlType>
   <iconFile />
   <helpUrl />
   <viewOrder>0</viewOrder>
   <supportsPopUps>True</supportsPopUps>
</moduleControl>

...在DNN清单文件中,但它没有效果。

我不确定我在这里缺少什么。我认为这可能很简单。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

通过使用DNN中的本地化方法来访问资源文件。您需要发布引用资源文件的方式,以最终弄清楚您做错了什么。

添加资源文件很简单,创建一个RESX文件以匹配您的ASCX文件

TeamList.ascx将获取一个资源文件 App_LocalResources /调用TeamList.ascx.resx导致路径 /app_localresources/teamlist.ascx.resx

要从后面的代码访问该路径,您只需调用

即可
var stringValue = Localization.GetString("STRINGNAME.Text", LocalResourceFile)

LocalResourceFile继承自PortalModuleBase(您需要让ASCX文件继承我的模板创建的基类,它们继承自PMB,或者您可以直接从PMB继承。

从ASCX文件中访问它可以类似地完成

<%=Localization.GetString("STRINGNAME.Text", LocalResourceFile)%>

来自

的控件内
<asp:label id="SOMEID" ResourceKey="STRINGNAME.Text" runat="server" />

唯一可能的其他问题是如果您将ASCX文件加载到另一个ASCX文件中,如果是这样,您需要将模块配置传递给代码隐藏中的子ASCX文件

我在DNNSimpleArticle module

中执行此操作
var mbl = (dnnsimplearticleModuleBase)LoadControl(controlToLoad);
mbl.ModuleConfiguration = ModuleConfiguration;
mbl.ID = System.IO.Path.GetFileNameWithoutExtension(controlToLoad);
phViewControl.Controls.Add(mbl);

这会让你指向正确的方向吗?