ThinkGeo.com    |     Documentation    |     Premium Support

Saving variables

Hi, I am new to asp .net, I would like to know how and where does thinkgeo saves map variables such as loaded layers, overlays? Can I save my variables along with ThinkGeo.MapSuite.WebEdition.Map object?


If I would save variables in session the user could open two windows with the same session with a different shapefiles and my variables are different for each shapefile so it would be bad.



Hello Hotter, 
  
 Thanks for your post, we store the necessary variable in the session and you can save your variables in it too. 
  
 And don’t worry about two windows with two map controls, we will create a new session for each map control so that you can save different variables for different map. 
  
 Please feel free to let us know your queries. 
  
 Regards, 
  
 Gary

 Is it possible to put my variables at that session too?



Hello Hotter, 
  
 Yes, the session is free to use, and please notice one map control id corresponding one session id, so you can get the map id and be sure you save the right information to right session. 
  
 Regards, 
  
 Gary

 Maybe you could give me an example how to get that sesion and how to add any variable?



Hello Hotter, 


Please check the attachment and see if it fit your requirement.


Regards,


Gary



006_005_004_003_002_001_DisplayASimpleMap.zip (5.29 KB)

It doesn't work very well. I set sesion value to TEXT on first window and all the other windows can get the same value and overwrite it. For some reason map.ID isn't unique. Why it isn't unique? What's wrong?


 



 Any ideas?



 Hi Hotter,


 
Please allow me to correct something from Gary's reply. Not all the states are saved in session. As you mentioned, session state is shared between different pages. We do saved something in the session; but we don't recommend to save some internal variables into our map sessions. To save internal state, please use ViewState instead. 
 
For example, if you want to maintain state of your variable, use the following code to save it.
ViewState["TEXT"] = "Hello Hotter";
                
And use the following code to load it after postback. Just be aware of the KeyNotFoundException if the key doesn't exist for the first time.
string text = ViewState["Text"].ToString();
 
This is the proper way to save your internal variables; hope it helps.
 
The map's ID isn't uniq, because it's not proper to be uniq. The ID property allows to get and set, we cannot limit everyone set different map names in different pages. Anyway, I think this is not a big point for you issue, please feedback if you like to know more about this question.
 
Thanks,
Howard

 I would prefere using sessions since my page doesn't refresh. I think I can't set Viewstate without refresh, can I? Or should I save variables in javascript variables and send to server every time? I think session is the best option here, but I need an unique session for every page.



Hi Hotter, 
  
 The unique key for saving map into session can be PageName + Map.UniqueID; but be aware of this case: two pages have the same page name, but in different relative path, such as /a/page.aspx and /b/page.aspx. It doesn’t fit for this; to fix it, we need put the relative path + page name + map.uniqueID. Hope it makes sense. 
  
 I’m not sure what your real scenario is, but javascript has many ways to save internal states. Like working with hidden tag, or web storage of Html5 (local storage and session storage). Please take a look at this. 
  
 Thanks, 
 Howard

 Map1.UniqueID is the same value in all the pages too ("Map1"). How to get a truly unique id?



 So is there an unique map id for all browser tabs? How do I get it?



Hi Hotter, 
  
 I guess there are 2 scenarios for me based on your description 
  
 1. There are different pages which each page includes a map and you want to make sure every page session key are unique when you open them at different tab. 
 2. Just have one page including a map, when we open it at different tab, you want to make sure session key are unique. 
  
 For the first one, I think everything should be fine, because we did some enhancements for this scenario before 6.0 release.  
  
 For the second, I guess you can use a GUID as the sessionId when the page is loaded for the first time, and then save this SessionId to the client side using a HiddenField, if would like to use it for the next time, we can read it from this hiddenField. 
  
  
  
 Thanks,  
 Johnny