Pregunta

Estoy tratando de descubrir cómo crear un control de servidor web que es básicamente un expanobject.

El deseo es crear automáticamente una propiedad en el control cuando se crea en el marcado ASPX.

Por ejemplo:

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

Donde el atributo de SantiProperty aún no existe como una propiedad en el control.

También debería mencionar que no necesito estrictamente ninguna funcionalidad de control o webcontrol.Solo necesito poder declararlo en el marcado con Runat="Server" (que en sí mismo puede requerir que sea un control, al menos eso es lo que estoy pensando).

¿Es posible?Si es así, ¿cómo puedo empezar?

muchas gracias.

¿Fue útil?

Solución

Creo que su primera apuesta sería implementar iattributeacesor :

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

El analizador de la página de ASP.NET Llama iattributeacessor.setattribute para cada atributo No se puede asignar a una propiedad pública.

Así que quizás puedas comenzar 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;
    }
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top