Установка свойства времени разработки из окна свойств пользовательского элемента управления веб-сервера зависает / завершает работу Visual Studio 2010

#asp.net #visual-studio-2010 #styles #custom-server-controls #design-time

#asp.net #visual-studio-2010 #стили #пользовательские элементы управления сервера #время разработки

Вопрос:

Как следует из моего названия, у меня проблема с ошибкой свойства set.

Вот сценарий:

  1. Я создал простой пользовательский ASP.Элемент управления Net server, который генерирует некоторый текст.
  2. Я хотел предоставить свойство времени разработки для этого текста, чтобы разработчики могли получить доступ к его стилю из окна свойств.
  3. Все свойства в окне свойств работают, за исключением свойств с типом System.Web.UI.WebControls.Style , который я создал.

Вот мое свойство:

 [Bindable(true)]
[Category("Appearance")]
[Description("The style for the header")]
[Localizable(true)]
public Style HeaderTextStyle
{
  get
  {
    Style s = (Style)(ViewState["HeaderTextStyle"] == null ? Styles.defaultHeaderStyle : ViewState["HeaderTextStyle"]);
    return s;
  }

  set
  {
    ViewState["HeaderTextStyle"] = value;
  }
}
  

О, и Styles.defaultHeaderStyle это просто свойство из внутреннего класса, которое возвращает новое Style .

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

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

Что является причиной этого?

Спасибо.

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

1. Что возвращает Styles.defaultHeaderStyle?

2. @rickschott он возвращает стиль. public static Style defaultHeaderStyle { get { Style result = new Style(); result.Font.Bold = true; return resu< } }

3. Я нашел решение. Я опубликую пояснения.

Ответ №1:

Я нашел ответ на свою проблему.

Видите ли, класс Style — это свойство, имеющее вложенные свойства, и оно называется сложным свойством. Сложным свойствам (свойство, которое имеет подсвойства) требуется пользовательское управление состоянием для использования состояния просмотра. Классу Style требуются атрибуты времени разработки, чтобы обеспечить сохраняемость в тегах элемента управления. Итак, то, что я написал в своем первоначальном сообщении, не будет работать.

Для получения полного объяснения посетите: Пример свойств серверного элемента управления из MSDN

Мне удалось реализовать это на этом примере. Я надеюсь, что это будет полезно другим пользователям.

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

1. В таком случае, не могли бы вы, пожалуйста, пометить сообщение как ответ, поскольку кому-то было бы проще посетить этот вопрос, который содержит решение?

2. Хорошо, я сделал. Я не мог до сих пор, потому что stackoverflow продолжал говорить мне, что я должен подождать 24 часа, чтобы пометить мой ответ как ответ.