Domanda

Sto cercando di capire come creare un controllo del server Web che è fondamentalmente un espansioneObject.

Il desiderio è quello di creare automaticamente una proprietà sul controllo quando viene creata nel markup ASPX.

Ad esempio:

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

DOVE L'Attributo POUlProperty non esiste ancora come proprietà sul controllo.

Dovrei anche menzionare che non ho strettamente bisogno di alcuna funzionalità di controllo o di webcontrol.Ho solo bisogno di poterlo dichiarare in markup con runat="server" (che in e di per sé potrebbe richiedere che sia un controllo, almeno è quello che sto pensando).

è possibile?Se sì, come posso iniziare?

Molte grazie.

È stato utile?

Soluzione

Penso che la tua prima scommessa sarebbe quella di implementare iattributeaccessor :

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

The ASP.NET Page Parser chiama IATTRIBBEACCESORR.setAttribute per ciascun attributo Non è possibile mappare su una proprietà pubblica.

Quindi forse puoi iniziare con

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;
    }
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top