2011-07-25 2 views
1

J'ai un bouton ASP.Net qui, lorsqu'il est cliqué, exécute le côté client et le code côté serveur. Dans certaines conditions, l'exécution de ce dernier doit être empêchée.Utiliser les données renvoyées par le service Web (jQuery, ASP.Net)

<asp:LinkButton OnClientClick="if(CheckItems() == false) return false;" runat="server" 
     ID="Button" onclick="Button_Click">Insert</asp:LinkButton> 

La méthode CheckItems appelle un service Web. Si la réponse du service Web est "DataFound", la méthode CheckItems doit renvoyer false.

function CheckItems() { 

     PageMethods.CheckItems($('#<%= txtField.ClientID %>').val(), function(response) { 

      if (response == "DataFound") { 
       alert("The text you entered does already exist."); 
       return false; 
      } 
     }); 
    } 

Avec ce code, CheckItems ne retourne pas faux. Comment cela peut il etre accompli?

La méthode web:

[WebMethod] 
    public static string CheckItems(string name) 
    { 
     SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["CS"].ConnectionString); 

     try 
     { 
      conn.Open(); 

      var selectCommand = conn.CreateCommand(); 

      selectCommand.CommandText = @"SELECT COUNT(*) FROM [Table] WHERE Name = @Name"; 
      selectCommand.Parameters.Add(new SqlParameter("Name", name)); 

      int results = (int)selectCommand.ExecuteScalar(); 

      if (results > 0) 
       return "DataFound"; 
      else 
       return "NoDataFound"; 
     } 
     finally 
     { 
      conn.Close(); 
     } 
    } 
+0

s'il vous plaît afficher le PageMode 'CheckItems' – naveen

Répondre

0

Depuis votre fonction javascript fait un appel asynchrone au serveur, il ne peut pas retourner immédiatement le résultat à votre événement click. Vous aurez besoin de séparer vos trucs dans des fonctions javascript distinctes, comme:

<a onclick="buttonClicked();">Insert</a> 

function buttonClicked() { 
    PageMethods.CheckItems($('#<%= txtField.ClientID %>').val(), function(response) { 
     if (response == "DataFound") { 
      alert("The text you entered does already exist."); 
     } else { 
      performPostback(); 
     } 
    }); 
} 

function performPostback() { 
    // Actually do your form post, maybe using __doPostBack 
} 
Questions connexes