ThinkGeo.com    |     Documentation    |     Premium Support

Building map in the controller

Good morning,


I'm working on making mods to some of the "Getting Started" guide samples to learn stuff.  While I may be wrong, I think with the complicated map we will be using the proper place to build the map is in the controller.  I have been able to do that, but I simply can't get anything else to work.  For example, I made a modification to a map with two layers to toggle a roads layer on and off in response to clicking a button.  When I debug the controller method I toggle the layer's IsVisible status and I can see that change, but it doesn't do anything to the map: both of my layers are still visible.  I tried changing MapBackground and I can't get that to work either.  This is an example of what I'm trying to do:


 


 



        [MapActionFilter]
        public ActionResult ToggleRoads(Map map, GeoCollection<object> args)
        {
            LayerOverlay bg = (LayerOverlay)map.BackgroundOverlay;
            foreach (Layer layer in bg.Layers)
            {
                if (layer.Name == "roads")
                {
                    layer.IsVisible = !layer.IsVisible;
                }
            }
            return View(map);
        }
Since all of the examples are written the other way around (coding the map in the view) I don't have much to go on. Any ideas of what I'm doing wrong?


Thanks,


Allen



Hi, 
  
 I am also using map suite mvc and I think that thinkgeo should provide much more samples where the map and layers are defined inside the view and populated / controlled from the controller.  To help with your issue I think that you have to understand that working with the controller methods require ajax most of the time.  A good practice at least for me is to define the map, overlays and layers inside the view then I do use ajax from the client side to control all map interactions. The other thing is that when you use ajax to call a method then most of the time you have to refresh the map on the client side when the ajax call has been completed from the server.  Of course needless to say that JavaScript is a must and should be part of the required skills needed to build advanced applications. 
  
 Jm.

 Guys,



Thanks so much for reminding us, I guess we will create more useful demos on MVC communication and attached them into wiki.thinkgeo.com , if you guys have any requirements, please feel free to let us know and we can do some references. 


Allen, I think Jean-marie shows a good way to go, besides this, we also can create the map object in the controller and then make it as the model of the view to show it. But if we would like to do any changes to the map on server side, the good practice is that we can use an Ajax call to call the action of the controller, but one thing that we need to pay attention to is that please make sure the called action shouldn’t return a real ActionResult (page view), it can be string, some complicated objects, void etc. Maybe you can try the installation demo “InteractiveOverlays\SetBackgroundColor”, which is similar to your demo except its map created in the View page. In your demo, you just need to change the code as following, and redraw the Overlay which contains these 2 layers on client side in its callback function.




        [MapActionFilter]
        public void ToggleRoads(Map map, GeoCollection<object> args)
        {
            LayerOverlay bg = (LayerOverlay)map.BackgroundOverlay;
            foreach (Layer layer in bg.Layers)
            {
                if (layer.Name == "roads")
                {
                    layer.IsVisible = !layer.IsVisible;
                }
            }
        }



 



Hope it helps,


Johnny





Good morning everyone… 
  
 Sorry for the delay.  I was on vacation last week.   
  
 Thanks for the info.  I need to have some level of funtionality demonstrated in a few weeks and am beginning to wonder if I should switch to the Web edition to get it done or just go with the samples use of building the map in the view.  I just don’t know if I will come across a limitation doing it that way.  This doesn’t mean it will have to be implemented this way for the actual development, it just sounds like it might be easier to get something “on the Web” as a demo since I better understand the traditional ASP flow.  The users would not know anything about the supporting technology so it probably doesn’t matter much to them.  I have done a lot more of the traditional ASP.NET stuff than MVC.  Any comments before I try this? 
  
 Allen

 Hi,


 
As a customer I was used to ASPX but ASP (not only speaking about thinkgeo) is no good with mobile device(s) too much data is transfered between the client and the server. Moreover, AJAX is way much easier with MVC!  I know it could take sometime to learn but believe me .NET MVC is really what the future is made of.
 
a screen copy of what could be done using .NET MVC, Twitter Bootstrap, knockout.js and some other cool techno.

Hi JM, thank you very much for providing the professional answer here. Your application looks pretty good. 


Allen, I agree with JM on his point absolutely. Asp.NET MVC is really what the future is made of. It can provide much more efficient, flexible and cross-platform application. It will be easier to implement AJAX. In traditional Asp.net, I guess ICallback will be used a lot to do the AJAX stuff, it will run into a big “switch…case” statement, maybe we can use “Reflection” here, but it still may make the application go into tightly coupling easily. Beside, Asp.NET Mvc will have a light-weight page-loading, there isn’t any viewState, extra useless information which takes part in client-server side communication. All in all, for me, I think MVC performs better than traditional Asp.net.
At the very beginning, I recommend you just follow the coding pattern used in “How Do I” sample to do your project, any question or problem, please feel free to let us know, we will provide the answer ASAP. After experienced one MVC project, I guess everything will become easier for you.
Best Regards,
Johnny

Johnny and Jean-marie, 
  
 Thanks for the comments.  The sample looks pretty impressive.  What it eventually came down to here was trying to make a Web application look and function a lot like our desktop application versus the fact that I’m not an interface design person…especially for the Web, so we put the thing on hold to concentrate on some other items, and maybe by then we’ll have a Web person who will know how do it.  I don’t think I would have had any problem dealing with the mapping part, it’s just the level of sophistication we were looking for in the interface surrounding the map. 
  
 Allen

Morning Allen, 
  
 Thanks for sharing your information, hope everything goes well in following development. Also if you have any more question, please feel free to let us know.  
  
 Best Regards, 
  
 Johnny