Serialisieren eines ASP.NET UserControl
Ich habe eine Anwendung mit einem GridView das GridView haben, in Ihrem PagerTemplate, ein GridViewPager das ist ein UserControl.
Nun bin ich versucht zu speichern GridViewPager in ein ViewState-und ich habe da ein problem mit der Serialisierung. Asp.Net sagen Sie mir, dass das Klasse ist nicht als serialisierbar markiert. Ich versuche zu Kennzeichnen, dass Sie serialisierbar sind, wie diese:
namespace Avalon.View.UserControls.Pagers
{
[Serializable]
public partial class GridViewPager : System.Web.UI.UserControl
{
private GridView _gridView;
public event EventHandler OnTextPageChanged;
//Methods, properties...
}
}
Aber Sie funktionieren nicht,
Mein code ist einfach, mal sehen:
//Get and set the GridViewPager to ViewState
public partial class ChamadoList : System.Web.UI.UserControl
{
//Here a Get and set my GridViewPager into ViewState
public GridViewPager gvp
{
get { return ((GridViewPager)ViewState["GridViewPager"]); }
set
{
if (value == null)
ViewState["GridViewPager"] = null;
else
ViewState["GridViewPager"] = value;
}
}
//Looping in a grid View i get the GridViewPager and put it on ViewState
protected void gvListaChamados_RowDataBound(object sender, GridViewRowEventArgs e)
{
//Here a get the pager
if (e.Row.RowType == DataControlRowType.Pager)
{
gvp = (GridViewPager)e.Row.FindControl("GridViewPager1");
}
}
//...
}
Und hier ist der Fehler
Server Error in '/' Application.
Typ 'ASP.view_usercontrols_pagers_gridviewpager_ascx' in Assembly 'App_Web_epwoiz7x, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ist nicht als serialisierbar markiert.
Beschreibung: Eine nicht behandelte Ausnahme ist aufgetreten während der Ausführung der aktuellen Webanforderung. Bitte überprüfen Sie die Stapelüberwachung für weitere Informationen über den Fehler und wo Sie Ihren Ursprung in den code.
Exception Details: System.- Laufzeit.Serialisierung.SerializationException: der Typ 'ASP.view_usercontrols_pagers_gridviewpager_ascx' in Assembly 'App_Web_epwoiz7x, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ist nicht als serialisierbar markiert.
Quelle Fehler:
Wurde eine unbehandelte Ausnahme generiert, die während der Ausführung der aktuellen Webanforderung. Informationen über den Ursprung und die Position der Ausnahme kann identifiziert werden mit der Ausnahmestapelüberwachung unten.
Stack Trace:
[SerializationException: der Typ 'ASP.view_usercontrols_pagers_gridviewpager_ascx' in Assembly 'App_Web_epwoiz7x, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ist nicht als serialisierbar markiert.]
System.- Laufzeit.Serialisierung.FormatterServices.InternalGetSerializableMembers(RuntimeType type) +7733643
System.- Laufzeit.Serialisierung.FormatterServices.GetSerializableMembers(Typ, StreamingContext context) +258
System.- Laufzeit.Serialisierung.Formatierer.Binären.WriteObjectInfo.InitMemberInfo() +111
System.- Laufzeit.Serialisierung.Formatierer.Binären.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter Konverter, ObjectWriter objectWriter) +161
System.- Laufzeit.Serialisierung.Formatierer.Binären.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter Konverter, ObjectWriter objectWriter) +51
System.- Laufzeit.Serialisierung.Formatierer.Binären.ObjectWriter.Serialisieren(Objekt, Grafik, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +410
System.- Laufzeit.Serialisierung.Formatierer.Binären.BinaryFormatter.Serialize(Stream serializationStream, Objekt, Grafik, Header[] Header, Boolean fCheck) +134
System.- Laufzeit.Serialisierung.Formatierer.Binären.BinaryFormatter.Serialize(Stream serializationStream -, Objekt-Diagramm) +13
System.Web.UI.ObjectStateFormatter.SerializeValue(SerializerBinaryWriter Schriftsteller, Object value) +845
[ArgumentException: Fehler serialisieren Wert 'ASP.view_usercontrols_pagers_gridviewpager_ascx' vom Typ 'ASP.view_usercontrols_pagers_gridviewpager_ascx.']
System.Web.UI.ObjectStateFormatter.SerializeValue(SerializerBinaryWriter Schriftsteller, Object value) +3395
System.Web.UI.ObjectStateFormatter.Serialize(Stream Ausgabestrom, Objekt stateGraph) +110
System.Web.UI.ObjectStateFormatter.Serialisieren(Objekt stateGraph) +57
System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Serialize(Object state) +4
System.Web.UI.Util.SerializeWithAssert(IStateFormatter formatter, Object stateGraph) +37
System.Web.UI.HiddenFieldPageStatePersister.Save () - +79
System.Web.UI.Seite.SavePageStateToPersistenceMedium(Object state) +105
System.Web.UI.Seite.SaveAllState() +236
System.Web.UI.Seite.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1099
Version Information: Microsoft .NET Framework, Version:2.0.50727.3082; ASP.NET Version:2.0.50727.4028
InformationsquelleAutor Ewerton | 2010-02-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum nicht einfach haben, dein UserControl verwalten von eigenen ViewState, anstatt zu versuchen, zu serialisieren selbst?
Diese Weise, wenn Ihr Benutzersteuerelement einer Seite Hinzugefügt wird, wird es verwalten von eigenen ViewSate.
Wenn ich das Verständnis Ihrer Frage, die Sie versuchen, speichern Sie die viewstate von einem Benutzer-Steuerelement in eine Kontrolle. Wenn dem so ist, dann sollte diese funktionieren, wenn Sie einfach fügen Sie ein Benutzersteuerelement als ein untergeordnetes Steuerelement auf die andere.
Das wird nicht funktionieren. Zum Beispiel, eine Klasse wie ein Menü kann Untermenüs, so dass das Menü selbst ist eine Subklasse von MenuItem, welches ein UserControl. Da im Menü speichern muss es Menüpunkte, Menüpunkte müssen serialisierbar sein, und da ein Menüpunkt kann ein Menü, ein Menü selbst muss serialisierbar sein.
InformationsquelleAutor CAbbott