2012-02-26 3 views
0

Я пытаюсь понять, как создать элемент управления веб-сервером, который в основном представляет собой ExpandoObject.System.Dynamic ExpandoControl это возможно?

Желание автоматически создать свойство элемента управления, когда оно создано в разметке 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; 
    } 
} 
+0

Brilliant! Я действительно давно читал об этом интерфейсе, но забыл об этом. Я думаю ты прав. Он может работать именно так, как мне нужно. Большое спасибо за Вашу помощь. Я обновлю это как принятый ответ, когда у меня появится возможность попробовать его сегодня вечером. – ChrisS

+0

Это действительно работает. Единственным ограничением является тот факт, что значение должно быть строковым, но с некоторой хитрой сериализацией и де-сериализацией это нужно будет сделать сейчас. – ChrisS

Смежные вопросы