我正在试图弄清楚如何创建一个基本上是ExpandoObject的Web服务器控件。
希望在aspx标记中创建属性时自动在控件上创建属性。
例如:
<x:ExpandoControl someProperty="a value"></x:ExpandoControl>
其中someProperty属性尚未作为控件上的属性存在。
我还应该提到我并不严格需要Control或WebControl的任何功能。我只需要能够使用runat =“server”在标记中声明它(它本身可能需要它作为一个控件,至少这就是我的想法)。
有可能吗?如果是这样,我该如何开始?
非常感谢。
答案 0 :(得分: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;
}
}