powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Свойства и подсвойства для пользовательских элементов управления
7 сообщений из 7, страница 1 из 1
Свойства и подсвойства для пользовательских элементов управления
    #33999289
Shevron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Довольно не типичная проблема. Есть пользовательский элемент управления A. В нем реализован класс B с несколькими открытыми свойствами (property1, property2, ...) класс string. В самом пользовательском элементе есть открытое свойство класса типизированной коллекции элементов класса B. Так вот, нужно сделать так, чтобы можно было заполнять эти элементы коллекция в шаблоне страницы, причем одно свойство заполнялось из дочерних элементов:
<%@ Register Src="A.ascx" TagPrefix="uc" TagName="A" %>
...
<uc:A ID="ucA" runat="server">
  <uc:B property1=”value” property2=”value” ...>
    <a href=”#”>link</a>
    <br />
    Text
  </uc:B>
  <uc:B property1=”value2” property2=”value2” ...>
    <a href=”#”>link2</a>
    <br />
    Text2
  </uc:B>
  ...
</uc:A>
Подскажите как такое реализовать, дайте пожалуйста действующий пример так как всевозможных ссылок и статей перечитал, но помогло мало.
...
Рейтинг: 0 / 0
Свойства и подсвойства для пользовательских элементов управления
    #33999327
Shevron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как результат моих копаний дошел до следующего:

1. Пометил класс пользовательского элемента управления атрибутом [ParseChildren(true, "Patterns")] где Patterns - открытое свойство типизированной коллекции элемнтов класса B.
2. Само свойство Patterns пометил аттрибутом   [PersistenceMode(PersistenceMode.InnerDefaultProperty)]

А вот дальше ничего не получается, к тому же нужно еще как-то указать что дочернии элементы складывать с отдельное свойство
...
Рейтинг: 0 / 0
Свойства и подсвойства для пользовательских элементов управления
    #34000357
Shevron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Причем при любых комбинациях атрибутов или смены класса коллекции ошибка одна и таже: при компиляции проекта VS выдает Object reference not set to an instance of an object. Если добавть два элемента <uc:B то эта ошибка вадется два раза.

Интересно становится, если заменить мою коллекцию на ListItemCollection. Ошибок вообще не возникает и все работает, значить проблема в реализации класса коллекции или класса элементов коллекции. Может кто-то знает как исправить?
...
Рейтинг: 0 / 0
Свойства и подсвойства для пользовательских элементов управления
    #34001446
gaidar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы правильно догадываетесь:
1. Коллекция должна реализовывать IList, например:[Editor(typeof(Design.MenuItemCollectionEditor), typeof(UITypeEditor))]
    public class MenuItemCollection : IList
    {}
2. Элемент, который входит в коллекцию нужно пометить атрибутами:[TypeConverter(typeof(ExpandableObjectConverter)), ParseChildren(true, "Text")]
    public class MenuItem : Control
    { }
3. Ну и сам контрол нужно пометить атрибутами:
[DefaultProperty("MenuItems"),
   ParseChildren(true, "MenuItems")]
    public class MainMenu : WebControl
    { }

 --
Гайдар Магдануров
E-Mail | Блог | Сайт

Difficult I do now, impossible will take a while...
...
Рейтинг: 0 / 0
Свойства и подсвойства для пользовательских элементов управления
    #34001636
Shevron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Но не получается, та же самая проблема. При компиляции VS выдает сообщение Object reference not set to an instance of an object.

Сделал с чистого листа, проблема не исчезла. Код вот он:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.ComponentModel;
using System.Drawing.Design;
using System.Web.UI.Design;
[DefaultProperty("Items"), ParseChildren(true, "Items")]
public partial class CMS_Core_WebUserControl2 : System.Web.UI.UserControl
{
  public TestItemCollection Items
  {
    get { return this._items; }
  }
  private TestItemCollection _items = new TestItemCollection();
}
[TypeConverter(typeof(ExpandableObjectConverter)), ParseChildren(true, "Text1")]
public sealed class TestItem : Control
{
  public string Text1
  {
    get { return this._text1; }
    set { this._text1 = value; }
  }
  private string _text1;
  public string Text2
  {
    get { return this._text2; }
    set { this._text2 = value; }
  }
  private string _text2;
  public string Text3
  {
    get { return this._text3; }
    set { this._text3 = value; }
  }
  private string _text3;
}
//[Editor(typeof(Design.MenuItemCollectionEditor), typeof(UITypeEditor))]
public sealed class TestItemCollection : System.Collections.Generic.List<TestItem>
{
}

Сам шаблон страницы:
<%@ Register Src="WebUserControl2.ascx" TagPrefix="uc" TagName="Test"  %>
...

<uc:Test ID="ucTest" runat="server">
  <uc:TestItem Text1="test1" Text2="test2" Text3="test3" />
</uc:Test>

В чем проблемы не пойму.

PS: Закоментировал атрибуты //[Editor(typeof(Design.MenuItemCollectionEditor), typeof(UITypeEditor))]
 так как не могу найти класс MenuItemCollectionEditor. В MSDN он описан в пространстве имен System.Web.UI.Design.WebControls но у меня в VS последнее это System.Web.UI.Design, а дальше есть только MobileControls (пространство имен System.Web.UI.Design.WebControls отсутсвует вообще)
...
Рейтинг: 0 / 0
Свойства и подсвойства для пользовательских элементов управления
    #34004096
Shevron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самое удивительное, что пример описанный в MSDN ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref13/html/T_System_Web_UI_ParseChildrenAttribute.htm выдает точно такуюже ошибку при компиляции. Начинаю подумывать об ошибке в Visual Studio, но почему тогда ListItemCollection отрабатывает нормально не могу понять. Вопрос очень актуален, так как вся эта затея имено для того чтобы задавать свойства пользовательского контрола через шаблоны в теэгах.
...
Рейтинг: 0 / 0
Свойства и подсвойства для пользовательских элементов управления
    #34004310
Shevron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кароче, я перепробовал все методы какие можно и ни один из них не изменил результата. Никакие атрибуты не меняют положения дел, значить на 100% уверен что проблема в моей реализации коллекции, поскольку с колекцией ListItemCollection все работает. Так вот, суть моей просьбы, многие и вас имеют доступ к исходным файлам фрэймворка, подскажите какими атрибутами и как описаны классы ListItemCollection и ListItem.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Свойства и подсвойства для пользовательских элементов управления
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]