System.dynamic obaseControl是可能的吗?
-
13-11-2019 - |
题
我正在尝试弄清楚如何创建一个基本上是一个expandoObject的Web服务器控件。
当在ASPX标记中创建时,我们的愿望是在控件上自动创建属性。
例如:
<x:ExpandoControl someProperty="a value"></x:ExpandoControl>
.
其中缺点属性尚未作为控件上的属性存在。
我还应该提到我不严格需要任何控制或webcontrol的功能。我只需要能够用Runat=“Server”(其本身可能需要它是一个控制,至少这就是我所想的)的标记。
是可能的吗?如果是这样我怎样才能开始?
非常感谢。
解决方案
我认为你的第一次投注是实现 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;
}
}