Разрешение любого свойства / атрибута на сервере /usercontrol

Я заметил, что на большинстве, если не на всех, стандартных веб-элементах управления в пространстве имен System.Web.UI.WebControls вы можете добавлять любые свойства, которые вам нужны, без сбоев страницы.

Для примера возьмем элемент управления asp:Button.

Этот код совершенно действителен:

<form runat="server">
    <asp:Button runat="server" Text="Test button" crapAttribute="crapValue" />
</form>

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

Я получаю сообщение об ошибке: "Элемент управления не имеет открытого свойства с именем"crapAttribute" ".

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

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

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

2 ответа

Решение

Вам не нужно ничего делать, чтобы разрешить добавление произвольных атрибутов в контрольную разметку. Вещи, производные от WebControl, обычно собирают эти атрибуты и сбрасывают их в коллекцию атрибутов.

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

Можете ли вы добавить простой пример кода нового элемента управления, который не отвечает на ваш вопрос?

Одним из способов сделать это является добавление пользовательского свойства в коде

myCustomControl.Attributes.Add("customproperty", "value");

Это должно сделать работу за вас.

Однако мне интересно знать, как это сделать в самом элементе управления сервером.

Другие вопросы по тегам