Nel tentativo di creare un'origine dati personalizzata che dovrebbe essere utilizzata in ASP.NET, ho creato una classe di origine dati personalizzata, un editor personalizzato e una personalizzata classe serializzabile.Perché la proprietà del mio designer non è serializzata nell'ASPX
Quello che non riesco a capire è perché non funziona ... anche se probabilmente ho più attributi del necessario (ho navigato e provato cose per ore), da quello che ho capito il PersistenceMode(PersistenceMode.InnerProperty)
avrebbe dovuto fare il trucco ... Inoltre, mi sembra che il mio codice sia simile a Why can't I declare sub-elements (properties) of a UserControl in a WebForm?.
Il codice funziona come segue:
editor di[ParseChildren(true)]
[PersistChildren(true)]
public class MyDataSource : DataSourceControl
{
// [much more irrelevant code...]
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[PersistenceMode(PersistenceMode.InnerProperty)]
[MergableProperty(false)]
[TypeConverter(typeof(ExpandableObjectConverter))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Editor(typeof(Editors.ResultRequestEditor), typeof(System.Drawing.Design.UITypeEditor))]
public ResultRequest Request { get; set; }
}
[Serializable]
[PersistChildren(true)]
[TypeConverter(typeof(ExpandableObjectConverter))]
[ParseChildren(true)]
public class ResultRequest
{
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
public string ColumnName { get; set; }
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
public Type ColumnType { get; set; }
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Always)]
public object[] ResultTypeParameters { get; set; }
}
L'usanza sembra funzionare: dopo l'uso, le proprietà di VS vengono aggiornati correttamente.
Tuttavia, dopo l'aggiornamento qualcosa l'informazione non viene mantenuto nel file ASPX:
<cc1:MyDataSource ID="SearchDataSource1" runat="server" ProviderID="MyProvider1" />
Quello che mi aspettavo era una serializzazione all'interno dell'origine dei dati, ad esempio:
<cc1:MyDataSource ID="SearchDataSource1" runat="server" ProviderID="MyProvider1">
<Request>
// blah
</Request>
</cc1:MyDataSource>
Qualcuno può spiegare perché questo non funziona?
Hai provato senza alcuni attributi, ad esempio i TypeConverters? –
Non capisco cosa stai cercando di fare. In linea di massima stai dicendo: ho tre classi e non funzionano. Cosa stai cercando di fare? Qual è il tuo comportamento obesizzato e il tuo comportamento previsto? Ti aspetti qualche serializzazione nell'origine dati? Serializzazione in una classe? Normalmente la serializzazione avviene all'interno di un file di testo o binario. Quindi la mia prossima domanda sarebbe: quale file? –
Fondamentalmente sto provando a creare un editor personalizzato per la classe 'ResultRequest'. La stessa fonte di dati funziona, non riesco a farla configurare dall'ASPX invece del codice sottostante. I TypeConverters sono lì perché la serializzazione predefinita (per il tuo XML ASPX) non funziona - f.ex. mentre so come serializzare 'oggetto []', il progettista no, quindi intendevo dirgli come è fatto. Questo è anche ciò che l'editor è per. Sì, ho provato ad aggiungere e rimuovere attributi per ore nel tentativo di capire come funziona (conclusione: non funziona e non lo capisco). – atlaste