2013-01-25 2 views
0

`m en utilisant la fonction de Javascript qui utilise un web service et après avoir terminé je dois mettre à jour une grille DatasourceJavascript appelant webservice et ASP.Net séquence

Pour accomplir cette tâche j'ai appelé la fonction javascript via RegisterClientScriptBlock puis appelez la méthode UpdateGridDataSource

Mais lors du débogage, j'ai trouvé qu'il appelait la méthode UpdateGridDataSource en premier. Puis appelez la méthode dans le WebService!

ASP.Net code

System.Web.UI.ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "delete", "DrawPOI();", true); 

UpdateDataSource(); 

JavaScriptCode

function DeletePOI(arg) { 
     //Some Code 
     $.ajax({ 
      url: "JSBLL.asmx/DeletePOI", 
      type: "POST", 
      dataType: "json", 
      contentType: "application/json; charset=utf-8", 
      data: "{id:'" + arg + "'}", 
      success: function (msg) { 
       alert(msg.d); 
      }, 
      error: function (e) { 
       alert('Error'); 
      } 
     }); //some code 
     return false; 
    } 

WebService:

[WebMethod] 
     [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
     public string DeletePOI(string ID) 
     try 
      { 
       if (id == "") 
        throw new Exception(); 

       long ID = Convert.ToInt64(id); 
       using (GuardEntities database = new GuardEntities()) 
       { 
        var poi = database.POIs.Where(x => x.ID == ID).FirstOrDefault(); 

        database.POIs.DeleteObject(poi); 
        database.SaveChanges(); 
       } 

       return "POI Deleted Successfully"; 
      } 
      catch 
      { 
       return "Error Occured"; 
      } 
} 

Le problème est que UpdateDataSource() est appelée avant DeletePOI (ID de chaîne)

+0

mettre un peu de code pour comprendre le problème –

+0

Le problème est dans la séquence des événements de tir si vous ne l'avez pas remarqué :) – Ahmed

+0

Code ajouté à la question – Ahmed

Répondre

0

Javascri Le code pt enregistré avec RegisterClientScriptBlock() s'exécute sur le client dans le navigateur. Le code ASP.NET s'exécute sur le serveur.

Quand il arrive à la ligne:

System.Web.UI.ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "delete", "DrawPOI();", true); 

Il dit, quand la page se charge sur le client, appelez DrawPOI(). Il exécute ensuite immédiatement la ligne de code suivante:

UpdateDataSource(); 

Quand il est fait avec tout le code ASP.NET, il envoie alors votre page au client. Fondamentalement, ce que vous essayez de faire ne fonctionnera pas. Vous ne pouvez pas appeler Javascript côté client au milieu de votre code ASP.NET côté serveur et attendez qu'il revienne.

Ce que vous pouvez faire est d'appeler le service Web directement à partir de votre code côté serveur.