ThinkGeo.com    |     Documentation    |     Premium Support

Map Control In Ajax Tab

Ok, here's a new one.


I have an ASP.Net web project with a page that has a tabbed control on it. It's a simple CSS tab inside an UpdatePanel so the tabs can be navigated without refreshing the entire page. The second tab is a Map tab, with a MapSuite WebEdition map control.


The map is not rendered until the user clicks the map tab. Then, on the callback, I add a specified shape file to the map and it is displayed. The map looks wonderful and all is fine. But, when the user attempts to click to another tab they can't. The browser generates the following javascript error:


Line:4724, Character: 21, Sys.WebForms.PageRequestManagerServerErrorException: Index was outside of the bounds of the array


I trapped the error in the AsyncPostBackError event of the ScriptManager control and retrieved the following exception information:


Source: WebEdition

StackTrace:

   at ThinkGeo.MapSuite.WebEdition.Map.xd8262f22d29c57d5(String[] x2ad333ebea325bde)

   at ThinkGeo.MapSuite.WebEdition.Map.x57b61acc3e039aed(String x96adbb16060a076f, NameValueCollection x13e9d0e2d3dc9cb2)    

   at System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad)    

   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


If you have some suggestions regarding the cause or workaround it would be appreciated. If a sample app is needed I will attempt to extract the pertinent portions and send to one of the tech support staff, but I would rather not post it in an open forum.


Bob Mc.










 




Hi Bob,


 


It’s a known bug in 3.1.16 working with callback; you can fix it with the following JavaScript in the header tag of your web page. 


 


  var OnMapCreated = function(map){             var postData = decodeURIComponent(__theFormPostData);             var startData = postData.substr(0, postData.indexOf('&'));             var endData = postData.substr(postData.indexOf('&'), postData.length - postData.indexOf('&'));             __theFormPostData = startData + ',' + map.getScale().toString() + endData; }  


 


If the problem still exists, please provide us your code, 


 


Any questions please let us know,


 


Thanks,


 


Howard


 


 



Howard, 
  
 Unfortunately, that didn’t work. The map is in a tab on a content page of a master page. I put the JavaScript you supplied in the content placeholder for the page header. The script shows up fine in the page header. I even put an alert message in the script to see if it gets there. 
  
 When I click the tab for the map the alert message fires, so I know that the supplied script is being executed. The map displays just fine. But when I try to click on another tab I get the same JavaScript error as noted in the first message. 
  
 I’ll try to make a small app to demo the problem. 
  
 Bob Mc.

Hi Bob, 
  
 I’m not sure what tab control you are using, how are you using Callback, is the map invisible when the page loaded or do you add the map dynamically. We are looking forward your small app, it might be a great help. 
  
 Thanks, 
  
 Howard 


Howard,


I'm not using a third-party tab control. I adapted a lightweight tab implementation using CSS and the UpdatePanel from something I read. The map control is hidden in the second tab's panel control when the page is first rendered.


I'm trying to upload an example project but your discussion board site is painfully slow at the moment and I'm having difficulty getting the file transferred. Any other alternatives?


Bob Mc.











Hi Bob,


 


So sorry that I didn’t mention where you could send your sample to, please send the sample to support@thinkgeo.com and ask to forward to Howard.


 


Any questions please let me know.


 


Thanks,


 


Howard




Email sent. Please review ASAP as this issue has become more urgent. A support ticket, #1968, has also been opened. 
  
 Bob Mc.

Bob,


Thanks for your example project which is very helpful. We found there is some problem in the above JavaScript, sorry about that and please replace it with the attached new one. 


Ps. This is a temporary solution, we will fix it in the upcoming version where you do not need the patch any more.


Thanks,


Ben


 





630-Script.txt (529 Bytes)

That appears to have corrected it. Thanks to Ben and Howard. 
  
 Bob Mc.

You are welcome, Bob! :)

Ben, 
  
 Did yesterday’s release, v3.1.124, address the issue raised in this thread? It wasn’t clear from the release notes, although I thought the bit about Javascript caching might be related. 
  
 Bob Mc.

Bob, 
  
 I think it has been corrected and you don’t need any patch script now. Please have a try and let us know if you have any issues. 
  
 Thanks, 
  
 Ben

Ben and Howard, 
  
 The latest release brings this error back in a slightly different form. My map appears on the tab properly, but if I attempt to add another shape to the map based on a user selection I get the same "Index was outside of the bounds of the array" error. This occurs when the old patch script is there or when it is removed. 
  
 I trapped the exception in the AsyncPostBackError handler of the ScriptManager object and it returned the following information: 
  
 {"Index was outside the bounds of the array."} 
     System.IndexOutOfRangeException: {"Index was outside the bounds of the array."} 
     Data: {System.Collections.ListDictionaryInternal} 
     HelpLink: Nothing 
     InnerException: Nothing 
     Message: "Index was outside the bounds of the array." 
     Source: "WebEdition" 
     StackTrace: "    
     at ThinkGeo.MapSuite.WebEdition.Map.xd8262f22d29c57d5(String[] x2ad333ebea325bde) 
     at ThinkGeo.MapSuite.WebEdition.Map.x57b61acc3e039aed(String x96adbb16060a076f, NameValueCollection x13e9d0e2d3dc9cb2) 
     at System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) 
     at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)" 
     TargetSite: {System.Reflection.RuntimeMethodInfo} 
  
 Bob Mc.








Rob,



I download the old sample you send to us and add a rectangle shape by a button, it works fine.



Here are two things you need to be aware of, one is the DLL you are using is 3.1.124 while the other one is remove the patch script. Please see the attached sample.



If you have any questions please let me know.



Thanks,



Howard




720-MapTabErrorExample.zip (82.1 KB)