¡Ayúdanos a traducir esta Web y consigue licencias gratis!
Usuario anónimo  |  Ingresar  |  Regístrate

Cómo...

Eventos de servidor 2

Si bien es cierto que los eventos de servidor predefinidos son los más comunes, puede darse el caso que queramos hacer algo diferente. Por ejemplo manejar un evento no-predefinido, o redefinir un evento predefinido del que queremos unos datos diferentes.

Para este caso tenemos el evento ServerEvent. Para hacerlo funcionar, deberemos seguir los siguientes pasos:

1.- Javascript
Debemos añadir un javascript y usar la clase javascript 'serverEvent' para mandar la información a servidor. Como vemos en el ejemplo, un modo sencillo de crear el javascript es usando addListener.
En los ejemplos vemos que usar la clase 'serverEvent' es muy sencillo, pues no hay más que inicializarla con el nombre que queramos darle al evento (eventName) y el identificador del mapa (GMap_Id) en el caso de que haya más de un mapa en una misma página e ir añadiéndole tantos argumentos como queramos. Finalmente hay que llamar a la función 'send()' y la información se envía a servidor.

2.- Servidor En el servidor, debemos manejar el evento ServerEvent, tal y como se hace con el resto de eventos.
Ahí dispondremos de GAjaxServerEventOtherArgs en la que podemos encontrar 2 propiedades (además de las comunes "who" y "point"):
  • eventName: string que contiene el nombre del evento que nosotros mismo hemos definido. Es muy útil para, como en el ejemplo, distinguir entre varios eventos diferentes
  • eventArgs: es un array de string que contiene todos los argumentos que hemos añadido en javascript.
En el ejemplo vemos como definimos dos eventos: "Click" y "InfoWindowClose".
El primero maneja el evento click del mapa; ya hemos visto que este evento era uno de los predefinidos, pero aquí hemos añadido un argumento que no teníamos antes: el tamaño del mapa.
En cuanto a "InfoWindowClose", maneja un evento de los no-predefinidos. Vemos pues que podemos manejar cualquier evento que produzca el mapa, los markers, o lo que sea.



Code.aspx
<cc1:GMap ID="GMap1" runat="server" enableServerEvents="true"
    OnServerEvent="GMap1_ServerEvent" />

Code.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
   if (!Page.IsPostBack)
   {
      GMap1.addListener(new GListener(GMap1.GMap_Id, GListener.Event.click,
       string.Format(@"
       function(overlay, point)
       {{
          if (!point) return;
          var ev = new serverEvent('Click', {0});
          ev.addArg({0}.getSize().width);
          ev.addArg({0}.getSize().height);
          ev.addArg(point.lat());
          ev.addArg(point.lng());
          ev.send();
       }}
       ", GMap1.GMap_Id)));
      GMap1.addListener(new GListener(GMap1.GMap_Id, GListener.Event.infowindowclose,
       string.Format(@"
       function()
       {{
          var ev = new serverEvent('InfoWindowClose', {0});
          ev.addArg('My Argument');
           ev.send();
       }}
       ", GMap1.GMap_Id)));
   }
}

protected string GMap1_ServerEvent(object s, GAjaxServerEventOtherArgs e)
{
    string js = string.Empty;
    switch (e.eventName)
    {
    case "Click":
       GLatLng latlng = new GLatLng(
       Convert.ToDouble(e.eventArgs[2], new System.Globalization.CultureInfo("en-US", false)),
       Convert.ToDouble(e.eventArgs[3], new System.Globalization.CultureInfo("en-US", false)));
       GInfoWindow window = new GInfoWindow(latlng, string.Format("Window Size (px): ({0},{1}). Close Me.", e.eventArgs[0], e.eventArgs[1]));
       js = window.ToString(e.who);
       break;
    case "InfoWindowClose":
       js = string.Format
       ("alert('{0}: {1} - {2} - {3}')", e.eventName, e.point, e.eventArgs[0], DateTime.Now);
       break;
    }
    return js;
}
Powered by Subgurim.NET and Comunactivo