Плагин DNN в некоторых случаях получает строку из файла LocalResources, в некоторых случаях не получает - PullRequest
0 голосов
/ 27 марта 2019

Я делаю собственный плагин для сайта 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 Ответ

2 голосов
/ 27 марта 2019
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? Если да, вы можете использовать метод LocalizeDataGrid () в событии Grid_Init. Пример:

   <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!
Michael

...