Разрешение любого свойства / атрибута на сервере /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");
Это должно сделать работу за вас.
Однако мне интересно знать, как это сделать в самом элементе управления сервером.