2015-04-21 33 views
0

我想給我的函數「InsertMethod」使用Ajax調用,但函數沒有被調用。 但是,如果我在新頁面中使用與下面相同的代碼,那麼它的工作即調用函數使用Ajax。任何人都可以請幫我解決這個問題。 我還有一個查詢。我無法訪問網頁的任何控制在Web方法「Insertmethod」Ajax調用我的aspx頁

下面

是腳本

<script type="text/javascript"> 
    function getDistinctChains() { 
     $.ajax({ 
      url: 'Tax_Type_Master.aspx/InsertMethod', 
      type: 'POST', 
      contentType: "application/json; charset=utf-8", 
      data: "{'Name':'" + TaxType.value + "'}", 
      //async: false, 
      success: function(response) { 
       $('[id*=txtTaxtypeName]').val(''); 
       alert("Record Has been Saved in Database"); 
      }, 
      error: function() { //console.log('there is some error'); 
       alert('there is some error'); 
      } 
     }); 
    } 
    $(document).ready(function() { 
     $('[id*=ImageSaveFooter]').click(function() { 
      getDistinctChains(); 
     }); 
    }); 
</script> 
下面

是我的CS代碼

public partial class Tax_Type_Master : System.Web.UI.Page 
{ 
    Generic gn = new Generic(); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      if (!IsPostBack) 
      { 
       Master.FillHeader("Tax Type Master"); 
       BindGrid(); 
      } 
     } 
     catch (Exception ex) 
     { 
      Master.ErrorMessage(ex.Message); 
     } 
    } 
} 

[WebMethod] 
[System.Web.Script.Services.ScriptMethod(ResponseFormat =  
    System.Web.Script.Services.ResponseFormat.Json, 
    UseHttpGet = false)] 
public static string InsertMethod(string Name) 
{ 
    TextBox TaxTypeName = (TextBox)grd_Master.FooterRow.FindControl("txtTaxtypeName"); 

    int count = (int)gn.ExecuteScaler("Check_TaxType_Ref_TaxTypeMaster", TaxTypeName.Text.ToUpper().Trim()); 

    if (count == 0) 
    { 
     gn.ExecuteNonQuery("Insert_Taxtype_Master", 
     TaxTypeName.Text.ToUpper().Trim()); 
     BindGrid(); 
     Master.SuccessMessage("Record Inserted Successfully.."); 
    } 
    else 
    { 
     Master.ValidationMessage("Record Already Exist.."); 
    } 
    return "True"; 
} 
+0

你粘貼的代碼是否正確? document.ready關閉括號});在腳本結束標記之後。 – Sandeep

+0

複製代碼時發生錯誤。我已更正代碼 – poonam

+0

檢查網址,請嘗試使用'/ Tax_Type_Master.aspx/InsertMethod' –

回答

0

你需要定義什麼版本的jQuery的你正在使用:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
<script type="text/javascript"> 
    $(function() { 
     $("#<%= Button1.ClientID %>").click(function (e) { 
      e.preventDefault(); 
      $.ajax({ 
       type: "POST", 
       ... 
+0

是的,我也定義了版本 – poonam

0

有一種替代方案可以使用這樣的查詢字符串: -

http://localhost/Tax_Type_Master.aspx?m=InsertMethod 

在頁面加載調用InsertMethod使用: -

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Request.QueryString.HasKeys() || 
       !string.IsNullOrEmpty(Request.QueryString["m"])) 
     { 
      var m = Request.QueryString["m"]; 

      switch (m) 
      { 
       case "InsertMethod": 
        InsertMethod("Name"); 
        break; 
      } 
     } 
    } 

InsertMethod是這樣的: -

public void InsertMethod(string Name) 
    { 
     Page.Controls.Add(new Literal(){Text = "<script>alert('method called');</script>"}); 
    } 

修改你的Ajax調用是這樣的: -

$.ajax({ 
      url: 'Tax_Type_Master.aspx?m=InsertMethod', 
      type: 'POST', 
      contentType: "application/json; charset=utf-8", 
      data: "{'Name':'" + "asdf" + "'}", 
      //async: false, 
      success: function (response) { 
       if (response.d) { 
        $('[id*=txtTaxtypeName]').val(''); 
        alert("Record Has been Saved in Database"); 
       } 
      }, 
      error: function() { //console.log('there is some error'); 
       alert('there is some error'); 
      } 
     }); 

希望得到這個幫助。

0

而且我還有一個查詢。我無法訪問網頁的任何控制在Web方法「Insertmethod」

這是事情應該是這樣,你無法通過PageMethod的訪問頁面控件作爲它們是靜態的,並具有對頁面的控件集合進不去。

從你的代碼中,很明顯你使用了一個文本框。因此,只需添加一個CssClass即可在ajax方法中像這樣訪問它。

<asp:TextBox ID="txtTaxtypeName" runat="server" CssClass="myclass"></asp:TextBox> 

像這樣改變你的ajax調用,這樣你就可以像這樣訪問頁腳行。

function getDistinctChains() { 
    var DTO = { Name = $(".myclass").val() }; 
    $.ajax({ 
     ..... 
     data: JSON.stringify(DTO), 
     success: function(response) { 
      ..... 
     }, 
     error: function() { 
      ..... 
     } 
    }); 
} 


話雖這麼說,這是不好的設計,因爲你不能在一個 PageMethod綁定的 asp:GridView。你要做的是向數據庫插入一個值(如果它是唯一的),並使用PageMethod重新綁定 GridView。插入將會很好。但 BindGrid()方法將不起作用,因爲它不能從靜態方法訪問 grd_Master

你必須使用一個UpdatePanel或使用第三方插件一樣datatables.netjqGrid

如需進一步信息,請閱讀本。 http://encosia.com/why-do-aspnet-ajax-page-methods-have-to-be-static/