Невозможно переместить регистрацию пользовательского элемента управления во вложенный файл web.config. - PullRequest
3 голосов
/ 16 июля 2010

Хорошо, я уже почти пять часов бьюсь головой об этом, поэтому думаю, что пришло время спросить.

Я работаю над веб-приложением (.NET 4.0, C #, ASP.NET, AJAX, jQuery) в Visual Studio 2010 (Professional), которое состоит из нескольких частей. Давайте назовем их Мо, Ларри и Керли, каждый из которых находится в подпапке проекта. В настоящее время каждый из них имеет несколько пользовательских элементов управления, которые хранятся в подпапке с именем Controls в своей определенной папке, и все эти элементы управления объявлены в корневом web.config.

Итак, у нас есть что-то похожее на это:
WebApp - Web.config
--Mo
---- Управление
--Larry
---- Элементы управления
--Curly
---- Управление

Я пытаюсь улучшить "модульность" веб-приложения и хотел бы иметь возможность (пока безуспешно) переместить объявление пользовательского контроля во вложенные файлы Web.configs, чтобы на них нельзя было ссылаться глобально. Я попытался сделать это, просто переместив объявления управления в Web.configs, которые находятся в папках с именами Stooge. Intellisense жалуется, что они не являются известными элементами, но работает, пока я не пытаюсь внести любые изменения в страницы (страницы), которые используют элементы управления. Как только я это сделаю (даже что-то столь же простое, как нажатие Enter для новой строки), дизайнер сходит с ума и удаляет ссылку на элемент управления.

Я пробовал web.configs в именованных папках, а также в папках sub Controls. Я также попытался включить пространства имен в web.configs на обоих уровнях.

Так, у кого-нибудь есть идеи?


Пример объявления web.config:

<?xml version="1.0"?>    
<configuration>
   <system.web>
      <pages>
         <controls>
            <add tagPrefix="curlyctrl" 
                 src="~/Curly/Controls/NuykNuyk.ascx" 
                 tagName="joke"/>
         </controls>
      </pages>
   </system.web>
</configuration>

Ответы [ 2 ]

0 голосов
/ 06 сентября 2011

Единственный способ найти это - вручную объявить элемент управления в коде страницы, на котором вы хотите элемент управления ... в вашем случае, что-то вроде ...

Protected WithEvents joke1 As NuykNuykCtrl

Или ...

protected NuykNuykCtrl joke1;

Автогенерация игнорирует элемент управления, поскольку он уже объявлен, и ваш код должен скомпилироваться.

Однако я полностью согласен с тем, что это не так красиво и аккуратно, как просто создать элемент управления на странице и позволить Visual Studio создать объявление для вас.

0 голосов
/ 14 мая 2011

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

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

ServerControl1.dll

  • ServerControl1

ServerControl2.dll

  • ServerControl1

Вы должны зарегистрировать элементы управления на своей странице следующим образом:

<%@ Register assembly="ServerControl1" namespace="ServerControl1" tagprefix="mo" %>
<%@ Register assembly="ServerControl2" namespace="ServerControl2" tagprefix="larry" %>

<mo:ServerControl1 ID="ServerControl1" runat="server" />
<larry:ServerControl1 ID="ServerControl2" runat="server" />

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

...