System.Dynamic ExpandoControl это возможно?
Я пытаюсь выяснить, как создать элемент управления веб-сервера, который по сути является ExpandoObject.
Желание состоит в том, чтобы автоматически создать свойство элемента управления при его создании в разметке aspx.
Например:
<x:ExpandoControl someProperty="a value"></x:ExpandoControl>
Где атрибут someProperty еще не существует как свойство в элементе управления.
Я должен также отметить, что мне не нужны никакие функциональные возможности Control или WebControl. Мне просто нужно иметь возможность объявить это в разметке с помощью runat="server" (что само по себе может потребовать, чтобы он был элементом управления, по крайней мере, я так думаю).
Является ли это возможным? Если так, как я могу начать?
Большое спасибо.
1 ответ
Я думаю, что ваша первая ставка будет заключаться в реализации IAttributeAccessor:
public interface IAttributeAccessor
{
string GetAttribute(string key);
void SetAttribute(string key, string value);
}
Анализатор страниц ASP.NET вызывает IAttributeAccessor.SetAttribute для каждого атрибута, который не может быть сопоставлен с общедоступным свойством.
Так что, возможно, вы можете начать с
public class ExpandoControl : Control, IAttributeAccessor
{
IDictionary<string, object> _expando = new ExpandoObject();
public dynamic Expando
{
{
return _expando;
}
}
void IAttributeAccessor.SetValue(string key, string value)
{
_expando[key] = value;
}
string IAttributeAccessor.GetValue(string key)
{
object value;
if (_expando.TryGetValue(key, out value) && value != null)
return value.ToString();
else
return null;
}
}