0

基本的にExpandoObjectであるWebサーバーコントロールを作成する方法を理解しようとしています。

aspxマークアップでプロパティが作成されるときに、コントロールにプロパティを自動的に作成することが望まれます。

例えば:

<x:ExpandoControl someProperty="a value"></x:ExpandoControl>

someProperty属性がコントロールのプロパティとしてまだ存在していない場合。

また、ControlまたはWebControlの機能は厳密には必要ありません。runat = "server"を使用してマークアップで宣言できる必要があります(それ自体がコントロールである必要がある場合がありますが、少なくともそれが私が考えていることです)。

出来ますか?もしそうなら、どうすれば始められますか?

どうもありがとう。

4

1 に答える 1

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;
    }
}
于 2012-02-26T19:19:42.297 に答える