在某些情况下,DNN插件从LocalResources文件获取字符串,在某些情况下未获取

时间:2019-03-27 11:24:43

标签: c# asp.net dotnetnuke

我正在为DNN站点制作自定义插件,并以此为墙。 我正在尝试从资源文件中获取字符串,但是只能从ResourceKey =“”中使用。 如果我放

ToolTip='<%$Resources:btnDelete %>'

我收到错误消息“找不到键为'btnDelete'的资源对象”

如果我从后面的代码中尝试。

protected void Page_Load(object sender, EventArgs e) {

rqValName.ErrorMessage = Localization.GetString("rqValNameResource1.ErrorMessage", LocalResourceFile); 

}

在调试器中,我可以看到该字符串,但未在站点上显示它。

这是也不起作用的代码:

<asp:RequiredFieldValidator ID="rqValName" CssClass="dnnFormMessage dnnFormError" runat="server" ControlToValidate="txtName" ErrorMessage='<%$Resources:rqValNameResource1 %>'></asp:RequiredFieldValidator>

如果我把ResourceKey =“ rqValNameResource1”放好,但是我不能在这里做

<asp:BoundField ItemStyle-Width="700px" DataField="sShortDescription" HeaderText='<%$Resources:HeaderShortDescription %>' />

DotNetNuke.Services.Exceptions.ModuleLoadException:找不到键为'HeaderShortDescription'的资源对象。

如果我输入ResourceKey =“ HeaderShortDescription”,它会说“属性ResourceKey不是元素BoundField的有效属性”。

我不想对此进行硬编码,因为稍后我需要翻译它。

谢谢。

1 个答案:

答案 0 :(得分:2)

ToolTip='<%$Resources:btnDelete %>'

不是DNN样式。 ResourceKey是正确的语法。

protected void Page_Load(object sender, EventArgs e) {

   rqValName.ErrorMessage = Localization.GetString("rqValNameResource1.ErrorMessage", LocalResourceFile); 

}

简单的方法是添加属性

ResourceKey="rqValNameResource1.ErrorMessage"

到ASP.Net Validator控件。

<asp:BoundField ItemStyle-Width="700px" DataField="sShortDescription" HeaderText='<%$Resources:HeaderShortDescription %>' />

您是否正在使用DataGrid控件?如果是,则可以在Grid_Init事件中使用LocalizeDataGrid()方法。示例:

   <asp:DataGrid ID="myGrid" runat="server"...
   ...
      <asp:BoundField HeaderText="ShortDescription" />

RESX文件:

键:ShortDescription.Header
值:简短说明

后面的代码:

protected void myGrid_Init(object sender, EventArgs e)
{
   Localization.LocalizeDataGrid(ref myGrid, LocalResourceFile);
}

在其他情况下,您可以在(Control)_ItemDataBound事件中使用此代码:

protected void myControl_ItemDataBound(object sender, ControlItemEventArgs e)
{
   if (e.Item.ListItemType == ListItemType.Header)
   {
      foreach (TableCell tc in e.Item.Cells)
      {
         tc.Text = Localization.GetString(string.Format("{0}.Header", tc.Text), LocalResourceFile);
      }
   }
}

(或类似的东西,我目前没有有效的示例)。

开心的DNNing!
迈克尔