Плагин DNN в некоторых случаях получает строку из файла LocalResources, в некоторых случаях не получает

#c# #asp.net #dotnetnuke

#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.Услуги.Исключения.Исключение ModuleLoadException: объект ресурса с ключом ‘HeaderShortDescription’ не найден.

И если я введу ResourceKey=»HeaderShortDescription», он скажет «Атрибут ResourceKey не является допустимым атрибутом элемента BoundField».

Я не хочу жестко кодировать это, потому что позже мне нужно будет это перевести.

Спасибо.

Ответ №1:

 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 Контроль проверки.

 <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-файл:

Ключ: краткое описание.
Значение заголовка: Краткое описание

Код, лежащий в основе:

 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!
Майкл

Комментарии:

1. Спасибо, Майкл. Это было очень полезно

2. Можете ли вы помочь мне с еще одной проблемой @Michael Tobisch? У меня есть кнопка, для которой необходимо подтверждение onClientClick: OnClientClick=»return confirm(‘Вы уверены?’)». Но я не могу понять, как получить строку из файла ресурсов. Я не хочу, чтобы это было жестко запрограммировано. Спасибо

3. Владимир, небольшое исследование могло бы продвинуть вас вперед быстрее, чем ожидание ответов, поскольку примеров много. Взгляните на плагин dnnConfirm .