Веб части со своими свойствами

 Комментарии можно оставлять "здесь"

Когда создаём визуальную веб-часть, то в большинстве случаев хотелось бы сделать так, чтобы она была универсальной, т.е. или автоматически вычислялись свойства (не всегда возможно) или пользователь мог сам устанавливать правила поведения. 
В данной статье приведу пример как добавить собственные свойства к визуальной веб-части.

1. Добавим в проект визуальную веб часть. 
2. В класс веб-части добавим свойство "Название". В реальных условия, конечно, нужно  будет использовать что-нибудь практичнее, например, имя списка, название сайта и т.п.

using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;

namespace blog.VisualWebPart1
{
    [ToolboxItemAttribute(false)]
    public class VisualWebPart1 : WebPart
    {
        // Visual Studio может автоматически обновлять этот путь при изменении данного элемента проекта визуальной веб-части.
        private const string _ascxPath = @"~/_CONTROLTEMPLATES/blog/VisualWebPart1/VisualWebPart1UserControl.ascx";

        protected override void CreateChildControls()
        {
            Control control = Page.LoadControl(_ascxPath);
            Controls.Add(control);
        }

        [Personalizable(PersonalizationScope.Shared)]
        [WebBrowsable(true)]
        [Category("Настрока")]
        [WebDisplayName("MyTitle")]
        [Description("Моё название")]
        public string MyTitle { get; set; }
    }
}

3. Добавим в разметку label, который отобразит введённое свойство.

<asp:Label runat="server" ID="lbTitle" Text="" />

4. В обработчике события загрузки страницы прочитаем значение свойства.

       protected void Page_Load(object sender, EventArgs e)
        {
            string propValue = (this.Parent as VisualWebPart1).MyTitle;
            lbTitle.Text = propValue;
        }
5. Разворачиваем и проверяем.
Добавим на страницу нашу веб-часть. Перейдём в её свойства

Появилась новая категория "Настройка". В ней есть наше свойство "MyTitle".
Устанавливаем в него значение. Сохраняем. Видим, что веб часть отобразила установленное нами значение.

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



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

        public enum ddlValues
        {
            v1 = 0,
            v2,
            v3
        };

        protected ddlValues propValues;
        [Personalizable(PersonalizationScope.User), WebBrowsable,Category("Настрока"), WebDisplayName("ddlValues"), WebDescription("")]
        public ddlValues PropValues
        {
            get { return propValues; }
            set { propValues = value; }

        }

а считывать его аналогично:

string propValue2 = (this.Parent as VisualWebPart1).PropValues.ToString();



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

1. Добавим новое свойство и новые обработчики событий в класс веб части:


        public string ddlValue { get; set; }
        protected override void Render(HtmlTextWriter writer)
        {
            base.Render(writer);
            writer.Write(ddlValue);
        }

        public override ToolPart[] GetToolParts()
        {
            ToolPart[] allToolParts = new ToolPart[3];
            WebPartToolPart standardToolParts = new WebPartToolPart();
            CustomPropertyToolPart customToolParts = new CustomPropertyToolPart();

            allToolParts[2] = standardToolParts;
            allToolParts[1] = customToolParts;
            allToolParts[0] = new CustomToolPart();

            return allToolParts;

        }
Функция Render в нашем случаи является необязательной, но как пример полезна. С её помощью можно выводить значение нашего свойства непосредственно в разметку или корректировать текущую.

Функция GetToolParts дает возможность в любой последовательности и в любом составе отображать блоки свойств. customToolParts - это блок с нашим свойством "MyTitle". standardToolParts - можно догадаться, что стандартные свойства.  CustomToolPart - это наша новая область, которые мы и опишем ниже.

Важно: Наша веб-часть должна наследоваться от Microsoft.SharePoint.WebPartPages.WebPart 

2. Опишем нашу новую область в отдельном классе.
    
    public class CustomToolPart : Microsoft.SharePoint.WebPartPages.ToolPart
    {
        DropDownList ddl;
        Panel toolPartPanel;

        protected override void CreateChildControls()
        {
            toolPartPanel = new Panel();
            ddl = new DropDownList() { ID="ddl"};
            ddl.Items.Add("v1");ddl.Items.Add("v2");ddl.Items.Add("v3");

            toolPartPanel.Controls.Add(new LiteralControl("<b>Собственный контрол</b> <br/>"));
            toolPartPanel.Controls.Add(ddl);
            Controls.Add(toolPartPanel);
            base.CreateChildControls();
        }

        public override void ApplyChanges()
        {
            VisualWebPart1 wp = (VisualWebPart1)this.ParentToolPane.SelectedWebPart;
            wp.ddlValue = ddl.SelectedValue;
        }

    }

Здесь в область добавляется контрол выпадающего списка со значениями, которые можно устанавливать динамически любые. При сохранении свойств, считывается выбранное значение и передается в наше свойство. Именно здесь можно реализовать любую логику.

Результат должен выглядеть примерно так:



 Комментарии можно оставлять "здесь"

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

Яндекс.Метрика