Beim Versuch, eine benutzerdefinierte Datenquelle zu erstellen, die in ASP.NET verwendet werden soll, habe ich eine benutzerdefinierte Datenquellklasse, einen benutzerdefinierten Editor und eine benutzerdefinierte erstellt serialisierbare Klasse.Warum ist meine Designereigenschaft im ASPX nicht serialisiert?
Was ich nicht verstehen kann ist, warum es nicht funktioniert ... obwohl ich wahrscheinlich mehr Attribute als erforderlich (ich habe seit Stunden stöbern und versuchen Dinge), von dem, was ich verstehe, die PersistenceMode(PersistenceMode.InnerProperty)
getan haben sollte der Trick ... Auch scheint mir mein Code ähnlich zu Why can't I declare sub-elements (properties) of a UserControl in a WebForm? zu sein.
Der Code funktioniert wie folgt:
[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; }
}
Die benutzerdefinierte Editor scheint zu funktionieren: nach Gebrauch, die Eigenschaften in VS richtig aktualisiert.
Doch nach etwas Aktualisierung der Informationen nicht in der ASPX-Datei beibehalten:
<cc1:MyDataSource ID="SearchDataSource1" runat="server" ProviderID="MyProvider1" />
Was ich erwartet hatte einige Serialisierung innerhalb der Datenquelle war, zum Beispiel:
<cc1:MyDataSource ID="SearchDataSource1" runat="server" ProviderID="MyProvider1">
<Request>
// blah
</Request>
</cc1:MyDataSource>
Kann jemand bitte erklären, Warum funktioniert das nicht?
Haben Sie versucht, ohne einige Attribute, zum Beispiel die TypeConverter? –
Ich verstehe nicht, was Sie versuchen zu tun. Im Grunde sagen Sie: Ich habe drei Klassen und sie funktionieren nicht. Was versuchst du zu tun? Was ist dein verhaltenes Verhalten und dein erwartetes Verhalten? Sie erwarten etwas Serialisierung in der Datenquelle? Serialisierung in einer Klasse? Normalerweise erfolgt die Serialisierung in einer Text- oder Binärdatei. Meine nächste Frage wäre also: Welche Datei? –
Nun, im Grunde versuche ich einen benutzerdefinierten Editor für die 'ResultRequest' Klasse zu erstellen. Die Datenquelle selbst funktioniert, ich kann es nur nicht von dem ASPX anstelle von dem Code dahinter konfiguriert werden. Die TypeConverter sind da, weil die Standard-Serialisierung (zu Ihrem ASPX-XML) nicht funktioniert - z. während ich weiß, wie man das 'object []' serialisiert, tut der Designer das nicht, also wollte ich ihm sagen, wie das geht. Dafür ist der Editor auch da. Ja, ich habe versucht, Attribute stundenlang hinzuzufügen und zu entfernen, um zu verstehen, wie es funktioniert (Fazit: Es funktioniert nicht und ich verstehe es nicht). – atlaste