Question

J'essaie de comprendre comment créer un contrôle de serveur Web qui est essentiellement un extension.

Le désir est de créer automatiquement une propriété sur le contrôle lorsqu'il est créé dans le balisage ASPX.

Par exemple:

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

Où l'attribut Someproperty n'existe pas encore en tant que propriété sur le contrôle.

Je dois également mentionner que je n'ai pas strictement besoin de fonctionnalités de contrôle ou de contrôle Web. J'ai juste besoin de pouvoir le déclarer en balisage avec runat = "serveur" (qui en soi peut exiger que ce soit un contrôle, c'est du moins ce que je pense).

Est-il possible? Si oui, comment puis-je commencer?

Merci beaucoup.

Était-ce utile?

La solution

Je pense que votre premier pari serait de mettre en œuvre IattributeAccessor:

public interface IAttributeAccessor
{
    string GetAttribute(string key);
    void SetAttribute(string key, string value);
}

Les appels d'analyse ASP.NET IattributeAccessor.SetAttribute Pour chaque attribut, il ne peut pas mapper à une propriété publique.

Alors peut-être que vous pouvez commencer par

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;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top