ThinkGeo.com    |     Documentation    |     Premium Support

ContextMenu problem

Hello,


I seem to be having a problem with ContextMenuItems with server-side events.  I have a class that dynamically adds markers to a SimpleMarker layer when a user clicks a (server side) button on my page.  This works great.  I then decided to add a ContextMenu as the markers are added.  This also works fine.  The hitch comes when I try to add a server side event to a menu item.  After the marker or markers with this menu item are added to the map, I can no longer perform postbacks to my page, and upon trying to do so, I recieve an error:




Message: Sys.WebForms.PageRequestManagerServerErrorException: Error binding to target method.

Line: 4723

Char: 21

Code: 0

URI: localhost:51344/ScriptResource.axd?d=w7IICo611mRry5nbgRZFnGOk8iJV5KdaHqCXW6Hhg0ncPUNV9u3Un-USZKKZMP1Pf3MtdaGPfkzVMScZx6dQBjx-Y4TaKwqYyqLTU-ilmsM1&t=ffffffffb504ae9a

 


I followed the example given for adding context menus, but I wasn't sure if I was messing something up since I'm adding them dynamically.  Thanks for the help!


-Dustin



Dustin, 
  
 I’m not sure where did you add the context menu to. On the map or on the marker? If it’s on the marker, it’s a known bug on the context menu on the simple markerOverlay which is fixed. If you want to try our temporary version which is not full tested, please contact support@thinkgeo to ask for it. 
  
 Thanks, 
 Howard

It was indeed on the marker.  Thanks for the help. 
 -Dustin

Dustin, 
  
 I see. Thanks for reporting. Please contact support@thinkgeo.com first; then we’ll do some simple test before we send it to you. 
  
 Thanks, 
 Howard

Hi Howard, 
 I have the newest version (3.1.215), and the problem persists.  Is there anything I can do to get this rectified?  Thank you! 
 -Dustin

Dustin,



I tried in our sample with the attached file and it works fine. Please have a try and see if there is any misunderstanding.



Any questions please let me know.



Thanks,

Howard



1096-AddAMarker.zip (2.2 KB)

Hi Howard,


The sample you sent me works great.  It appears the problem is with the Master Page.  I have included files so you can see what I'm seeing.  If you click on either of the 'Marker' buttons, a marker will be added, but the context menu's action won't fire.  Also, if you try to add the second marker, an error is thrown.  Thanks for the help again.


-Dustin



1098-GettingStarted.zip (3.48 KB)

Dustin, 
  
 I see. I recreated your issue. The reason is that the event cannot be found after postback with MasterPage. This issue is fixed. Please contact support@thinkgeo.com for the temporary release. 
  
 Thanks for reporting this bug. Please let me know if you have more questions. 
  
 Thanks, 
 Howard

Howard, 
 I received version 3.1.216 and the issue persists.  Should I be asking for a particular version? 
 -Dustin

Dustin, 
  
 Sorry, 3.1.216 doesn’t fix this bug. I’ll tell our support to send you another release after doing some simple tests on our latest build. 
  
 Thanks, 
 Howard 


Thanks again Howard. Sorry for all the trouble.  
 -Dustin

Dustin, 
  
 You are fine. Actually it’s a bug of ours. We should thank you for reporting this bug. 
  
 Please feel free to let me know if you have any queries. 
  
 Thanks, 
 Howard

Works great now, but I have to ask: is the intention to only allow one server event/entry per menu?  If I only have one, everything is fine, but if I have more than that, I get the same error.  Once again, this is in the Master/Content page scenario.  Thanks! 
 -Dustin

Dustin,



I tested and it works fine. Maybe there is a misunderstanding. What I did is that I added two markers on the map; each marker contains a context menu which has two menu items. each item hooks a different click event.



Here is a sample I tested. Please let me know if there is any misunderstanding.



Thanks,

Howard



1111-ContextMenuIssue.zip (3.56 KB)

Ah yes, that one was totally my bad.  I was using EventArgs instead of ContextMenuItemClickEventArgs on all but one event.  Mystery solved, though.  Might you be able to tell me how to add a parameter to the EventHandler, though?  I'm trying to generate these menus dynamically, but I can't seem to figure that out at all.


I'm working with:


ContextMenuItem.Click += new EventHandler<ContextMenuItemClickEventArgs>(MyEvent_OnClick);


Thanks for the continued support! 

-Dustin



Dustin, 
  
 I’m not sure what you want to do; could you let me know more about your issue? The click event is a generic handler so you need to create the delegate with the generic type. We response for pass in the parameters for you. So you don’t need to add the parameter to the event handler. I think I misunderstand your meaning.  
  
 Looking forward your feedback. 
  
 Thanks, 
 Howard

Sorry about that, I guess I could have been a little more specific. What I’m looking to do is, when a user clicks on the context menu, have the context menu pass a parameter back to the method that’s called. For instance, I would like MyEvent_OnClick to take in a string parameter ‘Name’ that is supplied by the ContextMenuItem, so when the menu item is clicked, the ‘Name’ variable is sent to MyEvent_OnClick in the event arguments.   I hope that makes more sense, I seem to be having a difficult time explaining this. Thanks for the help! 
 -Dustin

Hi Dustin,



I think you are right we don’t have some APIs to pass the parameters into the event. But hope the following method satisfies your requirement.



1.    Write a subclass of context menu.public class CustomContextMenuItem : ContextMenuItem
{
    private Dictionary<string, string> customAttributes;

    public CustomContextMenuItem(string innerHtml)
        : this(innerHtml, String.Empty, String.Empty)
    { }

    public CustomContextMenuItem(string innerHtml, string cssClass, string hoverCssClass) :
        base(innerHtml, cssClass, hoverCssClass)
    {
        customAttributes = new Dictionary<string, string>();
    }

    public Dictionary<string, string> CustomAttributes
    {
        get { return customAttributes; }
        set { customAttributes = value; }
    }
}



2.    New a CustomContextMenuItem object and add to the MenuItems collection of your ContextMenu.

3.    Implement the click event as you usually did.

4.    In the event, you can get the parameters by the sender properties.



Please let me know if you have any questions.



Thanks,

Howard

 



That’s perfect, Howard!  Thanks very much! 
 -Dustin

Dustin, 
  
 You are welcome; please feel free to let me know if you have more questions. 
  
 Thanks, 
 Howard