我正在尝试弄清楚如何创建一个基本上是一个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;
    }
}
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top