2011-07-25 6 views
1

私は、クリックするとクライアント側とサーバー側のコードを実行するASP.Net-Buttonを持っています。 特定の条件下では、後者の実行を防止する必要があります。Webサービス(jQuery、ASP.Net)から返されたデータを使用します。

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

CheckItemsメソッドは、Webサービスを呼び出します。 Webサービスからの応答が "DataFound"の場合、CheckItemsメソッドはfalseを返す必要があります。

function CheckItems() { 

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

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

このコードでは、CheckItemsはfalseを返しません。これはどのように達成できますか?

ウェブ-方法:

[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

PageMethod 'CheckItems'を表示してください – naveen

答えて

0

JavaScriptの関数はサーバへの非同期呼び出しを行っているので、それはあなたのクリックイベントにすぐに結果を返すことができません。あなたは別のjavascript関数にあなたのものを分ける必要があります:

<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 
} 
関連する問題