我正在为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的有效属性”。
我不想硬编码,因为后来我需要翻译它。
谢谢。
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! 迈克尔