Вы хотите использовать интерфейс IAttributeAccessor .
Определяет методы, используемые серверными элементами управления ASP.NET для обеспечения программного доступа к любому атрибуту, объявленному в открывающем теге серверного элемента управления.
Пример управления:
using System;
using System.Collections.Generic;
using System.Web.UI;
namespace App_Code.Controls {
public class OutputAttributesControl : Control, IAttributeAccessor {
private readonly IDictionary<String, String> _attributes = new Dictionary<String, String>();
protected override void Render(HtmlTextWriter writer) {
writer.Write("Attributes:<br/>");
if (_attributes.Count > 0) {
foreach (var pair in _attributes) {
writer.Write("{0} = {1} <br/>", pair.Key, pair.Value);
}
} else {
writer.Write("(None)");
}
}
public String GetAttribute(String key) {
return _attributes[key];
}
public void SetAttribute(String key, String value) {
_attributes[key] = value;
}
}
}
Призвание:
<AppCode:OutputAttributesControl runat="server" attr="value" />
Выход:
Attributes:
attr = value
Предостережения:
Кажется, что SetAttribute вызывается только для атрибутов, которые не могут быть разрешены нормально. Это означает, что вы не увидите идентификатор или атрибут runat в вашем коде. Назначенные свойства (attr = "<% = DateTime.Now%>") отображаются в виде пустой строки. Свойства привязки данных вообще не отображаются в режиме разработки, но работают в обычном режиме (при условии, что кто-то вызвал DataBind, как обычно).