Wednesday, June 5, 2024
 Popular · Latest · Hot · Upcoming
164
rated 0 times [  166] [ 2]  / answers: 1 / hits: 17920  / 13 Years ago, tue, august 9, 2011, 12:00:00

I know I can reference a simple session variable (ie: string) in javascript like this:



var SesVar = '<%= Session(MySessionVariable) %>';
alert(SesVar);


But the problem I have is that I have an ASP.NET generic list object stored in Session.Contents. The object looks like this:



Public Class LetterReason

Private _reasonCode As String
Public Property ReasonCode() As String
Get
Return _reasonCode
End Get
Set(ByVal value As String)
_reasonCode = value
End Set
End Property

Private _reason As String
Public Property Reason() As String
Get
Return _reason
End Get
Set(ByVal value As String)
_reason = value
End Set
End Property


I've stored a list of this object in session contents like so:



Dim lsReasons As New List(Of LetterReason)

lsReasons = MyWCF.Get(reasons)

Session.Contents(lsReasons) = lsReasons


Problem is, when I use the code above (SesVar), it returns this:



System.Collections.Generic.List`1[LetterWriterASP2.ServiceReference1.LetterReason]


Is there any way I can access a list stored in session contents through javascript?



Thanks,



Jason


More From » asp.net

 Answers
9

The problem is that the evaluation binding tag will automatically call the ToString() method on the whatever it finds in the Session object.



So, if:



var SesVar = '<%= Session(MySessionVariable).ToString() %>';


has a meaningful implementation (e.g. it is a string, or a value type), then you'll get what you expect.



However, in your example, you're storing an instance of the class, LetterReason, for which the default object ToString() virtual method call will return the name of the class.



The answer depends what you want to do with the result. You can't trivially use a .NET object in JavaScript, the data is going over a domain boundary (i.e. out of your .NET website and over the network and then into the DOM of a HTML page).



You will need to serialise it in some way, probably JSON. Use an approach like this: Can you Instantiate an Object Instance from JSON in .NET?



That's if you need all the richness of the class. If you're just looking for specific properties/methods, you could have:



var reasonCode = '<%= ((LetterReason)Session(MySessionVariable)).ReasonCode() %>';
var reason = '<%= ((LetterReason)Session(MySessionVariable)).Reason() %>';


So, here you'll need to cast your session instance to your particular class (plain .net System.Object are stored in the Sessions, giving you maximum flexibility) and then take the property you want.



However, serialising the object from .NET to JSON would be much the best solution, as it's flexible and maintainable.


[#90713] Monday, August 8, 2011, 13 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
shane

Total Points: 239
Total Questions: 91
Total Answers: 114

Location: Faroe Islands
Member since Tue, Jul 7, 2020
4 Years ago
shane questions
;