Правильный способ доступа к файлу ресурса для пользовательского элемента управления добавлен в модуль DNN?

Я работаю с шаблоном модуля Christoc, пытаюсь создать модуль с локализованным текстом. Я добавил новый пользовательский элемент управления с именем TeamList.ascx в проект, а в папку App_LocalResources я добавил два новых файла:

TeamList.ascx.resx иTeamList.ascx.fr-CA.resx(для канадского французского).

Я могу включить пользовательский элемент управления в моем представлении без проблем, но когда модуль загружается на страницу, все места, содержащие локализованный текст, остаются пустыми.

Я попытался зарегистрировать пользовательский элемент управления, включая:

<moduleControl>
   <controlKey>Teams</controlKey>
   <controlSrc>
      DesktopModules/LTSC_DashboardModule/TeamList.ascx
   </controlSrc>
   <supportsPartialRendering>False</supportsPartialRendering>
   <controlTitle>Team Control</controlTitle>
   <controlType>View</controlType>
   <iconFile />
   <helpUrl />
   <viewOrder>0</viewOrder>
   <supportsPopUps>True</supportsPopUps>
</moduleControl>

... в файле манифеста DNN, но это не имеет никакого эффекта.

Я не уверен, что мне здесь не хватает. Я думаю, что это, вероятно, что-то простое.

Заранее благодарю за любую помощь.

1 ответ

Решение

Доступ к файлу ресурса осуществляется с помощью методов локализации в DNN. Вам нужно будет опубликовать, как вы ссылаетесь на файлы ресурсов, чтобы в конечном итоге выяснить, что вы делаете неправильно.

Добавить файл ресурса просто, создайте файл RESX, соответствующий вашему файлу ASCX

TeamList.ascx получит файл ресурса в App_LocalResources/ с именем TeamList.ascx.resx, что приведет к пути /app_localresources/teamlist.ascx.resx

Чтобы получить доступ к этому пути из кода, вы просто позвоните

var stringValue = Localization.GetString("STRINGNAME.Text", LocalResourceFile)

Где LocalResourceFile наследуется от PortalModuleBase (вам нужно, чтобы ваш ASCX-файл наследовал базовый класс, созданный моими шаблонами, они наследуют от PMB, или вы можете наследовать от PMB напрямую.

Доступ к нему из файла ASCX может быть выполнен аналогично

<%=Localization.GetString("STRINGNAME.Text", LocalResourceFile)%>

Изнутри управления с

<asp:label id="SOMEID" ResourceKey="STRINGNAME.Text" runat="server" />

Единственный другой потенциальный улов - если вы загружаете свой ASCX-файл в другой ASCX-файл, если это так, вам нужно передать конфигурацию модуля дочернему ASCX-файлу в code behind.

Я делаю это в модуле DNNSimpleArticle с

var mbl = (dnnsimplearticleModuleBase)LoadControl(controlToLoad);
mbl.ModuleConfiguration = ModuleConfiguration;
mbl.ID = System.IO.Path.GetFileNameWithoutExtension(controlToLoad);
phViewControl.Controls.Add(mbl);

Это указывает на правильное направление?

Другие вопросы по тегам