質問

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

願いは、ASPXマークアップに作成されたときに制御にプロパティを自動的に作成することです。

例えば:

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

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

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

それは可能ですか?もしそうなら、どのように私は始めることができますか?

感謝します。

役に立ちましたか?

解決

あなたの最初の賭けは iattributeacccessor を実装することになると思います

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;
    }
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top