#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 .