在某些情况下,DNN插件从LocalResources文件中获取一些字符串,在某些情况下无法获取

问题描述 投票:0回答:1

我正在为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”,它说“Attribute ResourceKey不是元素BoundField的有效属性”。

我不想硬编码,因为后来我需要翻译它。

谢谢。

c# asp.net dotnetnuke
1个回答
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! 迈克尔

© www.soinside.com 2019 - 2024. All rights reserved.