System.Dynamic ExpandoControlは可能ですか?
-
13-11-2019 - |
質問
基本的に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;
}
}