System.Dynamic ExpDocontrol è possibile?
-
13-11-2019 - |
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.
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;
}
}