Jag använder mig av ViewState för att lagra en Collection med filnamn. Får inget fel då jag lägger till collectionen till ViewState utan då jag ska använda ViewState tex visa värden från den. Du kan inte lagra en Collection i ViewState. Lagra i en Sessions variable och använd Session.Remove("fil") när du inte behöver objektet längre. Grejen varför jag ville lagra collectionen i viewstate är att viewstate töms så fort användaren lämnar sidan, alltså så fort en ny sida hämtas. Med session måste jag ju hantera detta på ett annat sätt. Det verkar smartare att använda ViewState istället för sessionsobjekt, du behöver bara hitta eller skriva en klass som är "serializable". Pröva t ex Hashtable eller Arraylist. För att citera Susan Warren:ViewState problem
dim filer as new Collection
filer.Add("col", filnamn)
ViewState.Add("fil", filer)
Får detta fel:
Description: An unhandled exception occured during the execution of the web request. Please review the stack trace for more information about the error and where it orginated in the code.
Exception Details: System.Web.HttpException: The type 'Microsoft.VisualBasic.Collection' must be marked as Serializable or have a TypeConverter other than ReferenceConverter to be put in viewstate.
Byter jag ut ViewState till Session funkar det utan problem. Anledningen till att jag vill använda ViewState är att jag bara behöver lagra info under tiden jag är på en sida. Slipper då bry mig om att kasta sessioner.
Är det någon som vet hur jag ska göra för att få det att fungera med ViewState?Sv: ViewState problem
Sv: ViewState problem
Visst kan jag använda sessioner men vad händer tex om jag inte skickar mailet och går till en annan sida. Då finns ju sessionen kvar. Jag kan ju inte ha Session.Remove("fil") på varje sida. Tänk om jag har 100 filer. Jag provade att lägga Session.Remove("fil") i Page_Unload men den körs ju alltid då en sida laddas.
Jag vet i VB så kan man när man stänger ner ett formulär köra Unload tror jag det hette där man kan städa efter sig bla stänga databaser. Finns det inget liknande i ASP.NET som alltid körs då en sida lämnas. Då skulle jag ju kunna ha Session.Remove("fil") där.
Jag vill alltså bara ha Session.Remove("fil") på ett ställe och som körs då jag lämnar sidan. Hur gör jag det?Sv: ViewState problem
Här är en exempel på en egen klass:
<Serializable()> _
Public Class SerializableCollection
Inherits CollectionBase
Public Sub Add(ByVal item As Object)
Me.InnerList.Add(item)
End Sub
End ClassSv: ViewState problem
"The ViewState serializer is optimized for a small set of common object types. Other types that are serializable may be persisted in ViewState, but are slower and generate a very large ViewState footprint."
Jag rekommenderar följande läsning http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspnet/html/asp11222001.asp