3 messaggi dal 13 dicembre 2006
Salve a tutti,
ho sviluppato un WebControl personalizzato (LabelEx) estendendo il controllo Label del framework.
Sostanzialmente questo controllo personalizzato aggiunge solo l'implementazione di una mia interfaccia (qualche proprietà e un metodo) necessari alla mia infrastruttura.
Una di queste proprietà (la ControlValue di tipo Object) punta alla proprietà Label.Text

Il controllo funziona correttamente ma mi succede una cosa che non so spiegarmi nel designer di VS2005: quando modifico una qualsiasi proprietà del controllo il designer ri-scrive il mio tag LabelEx sulla pagina aspx. Fin qui tutto ok. Peccato che vada a scrivere anche l'attributo ControlValue (con il valore corrente della proprietà Label.Text a cui è collegato), anche se non ho modificato quella proprietà, né la proprietà Label.Text.
A questo punto il VS2005 si incazza con un errore del tipo "Impossibile creare un oggetto di tipo 'System.Object' dalla relativa rappresentazione di tipo stringa 'Data' per la proprietà 'ControlValue'" ('Data' è il valore corrente della Label.Text).
Cancellando l'attributo 'ControlValue' dal codice asp.net il designer torna a visualizzare correttamente il controllo.

LA DOMANDA E':
In base a cosa il designer VS2005 stabilisce cosa scrivere nel codice aspx???????? Come evitare che vada a scrivere il valore di una specifica proprietà???????????

Grazie a chi saprà aiutarmi.

Riporto una parte del codice:

[LabelEx.vb]

<DefaultProperty("Text"), _
ToolboxData("<{0}:LabelEx runat=server></{0}:LabelEx>")> _
Public Class LabelEx
Inherits Label
Implements IControl 'MIA INTERFACCIA

Public Property ControlValue() As Object Implements IControl.ControlValue
Get
Return Me.Text
End Get
Set(ByVal value As Object)
Me.Text = value
End Set
End Property

[...]
End Class


[PaginaDiTest.aspx]

[...]
<rescliweb:LabelEx ID="LabelEx10" TagValue="L11" Text="Data" runat="server" ControlValue="Data" ></rescliweb:LabelEx>
[...]
3 messaggi dal 13 dicembre 2006
Ho risolto da solo.
Ho messo l'attributo ComponentModel.DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
alla proprietà incriminata così il designer non la serializza più sulla pagina aspx.... e tutto funziona.

Ciao
John
1 messaggio dal 18 settembre 2007
Ciao Jhon,
Grazie infinite per il tuo contributo.

Ho avuto un problema analogo, con una sorta di TextBox di mia invenzione che prendeva come valore di una proprietà un oggetto simile ad un DataSource (sempre di mia invenzione).

Utilizzando l'attributo <ComponentModel.DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> (in VB.Net) ho risolto il problema e l'editor ha smesso di andare in eccezione (nel mio caso l'eccezione veniva emessa a video al posto del controllo TextBox, dentro l'editor della form WEB).

Giochicchiando un po' con il NameSpace ComponentModel ho scoperto che è possibile anche evitare che determinate proprietà di un controllo vengano visualizzate nel pannello proprietà dell'editor visuale; l'attributo apposito è

<ComponentModel.Browsable(False)> sempre in VB.Net.

Immagino che, se si vogliono realizzare controlli di qualità, la conoscenza del NameSpace ComponentModel sia fondamentale...

Qualcuno conosce altri NameSpace utili all'uopo o comunque info interessanti per quanto riguarda la creazione di controlli server side?

Saluti a tutti

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.