Теперь вы готовы добавить WebParts в зоны, которые вы определили. Для этого есть несколько способов. Вы можете создать реальные элементы управления, которые реализуют класс WebPart. Это даст максимальную гибкость для создания WebParts. Это также позволит вам создать для ваших WebParts настройку пользователями. Эта настройка видна тогда, когда пользователь редактирует WebParts. Это самый сложный способ. Разумеется, он рекомендован для разработчиков порталов. Другой (быстрый) способ создания WebParts — это применение пользовательских элементов управления или обычных элементов управления ASP.NET. Например, когда вы перетаскиваете на форму такой элемент управления, как Label, то ASP.NET определяет WebParts вокруг этого элемента. Это дает легкий способ создания WebParts.
Для примера вы будете реализовывать последний способ. Сначала вы создадите WebParts для клиентских ссылок. Эта WebParts даст целый набор ссылок, используемых для управления клиентом. Далее приведена схема процесса создания этой WebParts:
1. Перетащить элемент управления ASP Label внутрь элемента управления WebPartZone (для ссылок пользователя).
2. Эта метка автоматически превратится в элемент управления WebPart. Вы можете видеть это в разметке. Элемент <ZoneTemplate> добавлен внутри узла <asp: WebPartZone>. Внутри находится элемент управления Label, который вы добавили на форму.
3. Настройте заголовок для WebParts. Для этого добавьте атрибут title к элементу управления Label. Этот атрибут подхватывается ASP и применяется к WebParts.
I
4. Добавьте несколько ссылок в пределах объявления <asp:Label>. Окончательная раз- метка представлена в листинге 14.2. Здесь мы опустили информацию о стилях, которая обычно находится в зоне WebParts; это сделано в интересах доходчивости.
<asp:WebPartZone ID="WebPartZoneCustomerLinks" runat="server">
<ZoneTemplate>
<asp:Label title="Customer Links" ID="Labell" runat="server" Text="Label"> <a href="FindCustomer.aspx">Find Customer</a><br />
<a href="FindOrder. aspx">Find Order</axbr />
<a href="CustomerDiscounts.aspxM>Customer Discounts</a><br />
</asp:Label>
</ZoneTemplate>
</asp:WebPartZone>
Повторите этот метод для еще нескольких WebParts. Для нашего примера создайте WebParts: Active Shoppers, Help, Edit Mode indicator, Find Customer Orders и Top Products.
Вы можете попытаться создать пару этих элементов как пользовательские элементы управления (дополнительную информацию по пользовательским элементам управления см. в разд. "Работа с элементами управления ASP.NET" далее в этой главе). Можете также попытаться создать один или два этих WebParts как таблицы, вложенные внутри элемента
управления Label. На рис. 14.50 показано то, как ваша страница должна теперь выглядеть в визуальном конструкторе.
Разрешение пользователям настраивать страницу
Есть много способов разрешить пользователям настраивать внешний вид и поведение WebParts. Вы можете создать редакторы для ваших элементов управления, которые позволят вам делать полную настройку каждого элемента управления. У вас могут быть WebParts, которые способны подключаться к другим WebParts или вести обмен с ними. Им обычно требуется некоторая настройка. Вы можете позволить пользователям выбирать элементы управления из каталога (для того чтобы они указали, какие элементы управления они хотели бы видеть на странице). Обычным делом является также разрешение пользователям минимизировать, закрывать и перемещать ваши элементы управления из зоны в зону. Здесь мы рассмотрим несколько этих вариантов.
Сначала давайте настроим нашу страницу WebParts для того, чтобы позволить пользователям добавлять WebParts на страницу так, как они сочтут необходимым. То есть пользователи смогут определять, какие WebParts они хотят видеть на странице и где они хотят их видеть. Следующий список определяет шаги, необходимые для модификации нашей страницы WebParts таким образом, чтобы сделать возможным этот уровень пользовательской настройки:
I. Мы начинаем со страницы WebParts, которая включает две WebParts на основе меток: Active Shoppers и Find Customer Orders. Страница содержит также три WebParts на основе пользовательских элементов управления: Help, Customer Links и Top Products.
Именно последние три мы хотим отдать на усмотрение пользователя. Пользователь сможет добавлять и удалять эти элементы со страницы. Ваш первый шаг— удалить их со страницы. Мы скоро вернем их обратно.
2. Вы используете WebParts с названием CatalogZone для активирования управления группой (или каталогом) WebParts. Когда страница была скомпонована впервые, мы добавили этот WebParts в самую правую зону. Если у вас его нет, добавьте его.
3. Затем внутри WebParts с названием CatalogZone добавьте DeclarativeCatalogPart. Этот элемент управления указывает, что вы будете объявлять все WebParts, которыми можно управлять в этой зоне. Есть аналогичные WebParts вроде PageCatalogPart, который управляет всеми WebParts на странице.
4. Следующий шаг— объявить WebParts, которые будут управляться внутри каталога. Вы делаете это при помощи размещения определения каждого пользовательского элемента управления (или WebParts) внутри раздела DeclarativeCatalogPart. Ваша разметка должна выглядеть примерно так:
<asp:CatalogZone ID="CatalogZonel" runat="server"
HeaderText="Manage WebParts">
<ZoneTemplate>
<asp:DeclarativeCatalogPart Title="Select a WebParts"
ID="DeclarativeCatalogPartl" runat="server"> <WebPartsTemplate>
<ucl:TopProducts title="Top Products" ID="TopProductsl"
runat="server" />
<uc2:HelpControl title="Help" ID="HelpControll" runat="server" /> <uc3:CustomerLinks title="Customer Links" ID="CustomerLinksl"
runat="server" />
</WebPartsTemplate>
</asp:DeclarativeCatalogPart>
</ZoneTemplate>
</asp:CatalogZone>
5. Последний шаг — разрешить пользователю активировать редактирование для включения этого каталога. Для этого мы будем использовать кнопку LinkButton. Добавьте элемент управления LinkButton в правую нижнюю часть страницы. Создайте обработчик события щелчка для элемента управления LinkButton. Внутри этого обработчика события вам нужно переключать состояние отображения страницы между режимом Browse (нормальное представление) и режимом Catalog (пользовательское представление выделения WebParts). Это делается в нижеследующем коде:
protected void LinkButtonChangeContent_Click(object sender, EventArgs e) { if (LinkButtonChangeContent.Text == "Change Content") {
// EditorZoneMain.
WebPartManagerMain.DisplayMode =
WebPartManagerMain.SupportedDisplayModes["Catalog"];
} else {
WebPartManagerMain.DisplayMode =
WebPartManagerMain.SupportedDisplayModes["Browse"];
}
Вот и все. Теперь вы должны запустить страницу и позволить пользователю произвести выбор этих трех WebParts. На рис. 14.51 показана запущенная в браузере страница. Пользователь щелкнул по ссылке Change Content внизу справа для запуска менеджера WebParts. Пользователь может выбрать WebParts и указать, в какую зону страницы она должна быть добавлена. Обратите также внимание, что WebParts с названием Top Products уже добавлена на страницу пользователем. Наконец, пользователь может при желании добавить на страницу несколько вариантов одной и той же WebParts.
Рис. 14.51. Использование каталога WebParts во время выполнения
Еще одна стандартная пользовательская настройка — это разрешение перемещения WebParts между зонами и относительно друг друга. Когда пользователь находится в режиме каталога (как в предыдущем примере), то эта функциональная возможность включена. Однако бывают случаи, когда вы добавляете эту функцию для пользователей, но требуете повышенного уровня доверия при добавлении и удалении WebParts со страницы.
Для того чтобы разрешить пользователям менять только компоновку страницы WebParts, вам нужно сделать несколько шагов:
1. Добавить на страницу элемент управления EditorZone. Добавление этого элемента управления создает зону, куда вы можете поместить EditorParts. Обычно вы показываете эту зону тогда, когда ваша страница находится в режиме редактирования. В данном примере предположим, что вы используете эту зону, но не собираетесь показывать ее пользователям.
2. Добавьте элемент управления LayoutEditorPart в только что созданную вами EditorZone. Эта WebParts позволяет включить редактирование компоновки страницы.
3. Создайте элемент управления LinkButton, чтобы разрешить пользователю включать режим редактирования страницы. Конструкция вашей формы должна выглядеть примерно так, как на рис. 14.52.
Рис. 14.52. Конструирование опций компоновки для пользователя
4. Теперь вам нужно написать код для события щелчка LinkButton. Этот код аналогичен нашему предыдущему примеру. Вот пример:
protected void LinkButtonEditPage_Click(object sender, EventArgs e) { if (LinkButtonEditPage.Text == "Edit Layout") {
// EditorZoneMain.
WebPartManagerMain.DisplayMode =
WebPartManagerMain.SupportedDisplayModes["Edit"]; LinkButtonEditPage.Text = "Finish Edit";
} else {
WebPartManagerMain.DisplayMode =
WebPartManagerMain.SupportedDisplayModes["Browse"]; LinkButtonEditPage.Text = "Edit Layout";
}
Теперь вы можете запустить страницу и посмотреть результаты. Когда вы щелкнете по ссылке Edit Layout, то страница перейдет в режим Edit. Здесь пользователь может перемещать элементы управления между зонами, передвигать их и переключать их состояние (закрывать и открывать). На рис. 14.53 все это показано в действии.
Совет
Персонализация Web-частей между сеансами сохраняется. Если пользователи (или разработчики) закроют элементы управления, то им нужно дать способ вернуть их назад. Вы можете написать код для сброса персонализации страницы. Например, вы можете дать пользователю ссылку для этого. Внутри события данной ссылки вы должны будете добавить примерно такую строку кода:
WebPartManagerMain.Personalization.ResetPersonalizationState()
Работа с элементами управления ASP.NET
В Visual Studio 2008 и новой версии ASP.NET введены несколько новых элементов управления и сделано множество улучшений элементов управления. Мы уже описали в этой главе несколько элементов управления ASP.NET, таких как WebParts, метки и кнопки. В последующих разделах мы хотим дать описание множества других элементов управления ASP.NET. Сюда входят как стандартные элементы управления, так и элементы для проверки, регистрации, навигации и данных. Мы потратим также определенное время на обсуждение определяемых пользователем элементов управления.
Примечание
Описание элементов управления Ajax см. в главе 17.