从JSON调用服务器端方法

问题描述:

如何从JSON调用服务器端的方法。下面是我使用的代码从JSON调用服务器端方法

服务器端:

[WebMethod] 
private void GetCustomer(string NoOfRecords) 
{ 

    string connString = "Data Source=Something;Initial Catalog=AdventureWorks;Trusted_Connection=True;"; 
    SqlConnection sCon = new SqlConnection(connString); 
    SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Sales.Customer WHERE CustomerID < '" + NoOfRecords+ "' ", sCon); 
    DataSet ds = new DataSet(); 
    da.Fill(ds); 
    GvDetails.DataSource = ds.Tables[0]; 
    GvDetails.DataBind(); 

} 

在客户端:

<div> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <asp:TextBox ID="txtValue" runat="server"></asp:TextBox> 
    <asp:Button ID="btnShow" runat="server" Text="Sow Records without PostBack" /> 

    <asp:GridView ID="GvDetails" runat="server"> 
    </asp:GridView> 
</div> 

<script language="javascript" type="text/javascript"> 


var txtID = document.getElementById('txtValue'); 
$.ajax({ 
    type: "POST", 
    url: "Default.aspx/GetCustomer", 
    data: "{Seconds:'" + txtID +"'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(response) { 
    alert(response); 
    } 
    }); 
</script> 

现在我要上按一下按钮,我会打电话的功能在客户端[ JSON],它将文本框的值传递给函数。 请帮忙

看起来你想要重新绑定网格并在页面上进行更新。在这种情况下最简单的事情就是将按钮和网格放在更新面板中。给按钮一个服务器端点击事件。因为它位于更新面板中,它将使用ajax处理您的ajax调用,并且更新面板的内容将自动更新。

如果你想做ajax调用manuall,你将不能像这样绑定网格,而是你的GetCustomer方法将需要返回一些将被你的客户端使用的javascript。我发现不是使用$ .ajax调用(jquery),如果将ScriptService标记放在方法上,可以调用PageMethods.GetCustomer(NoOfRecords)来调用JavaScript。 javascript调用语法与您声明方法的c#语法完全相同,但在JavaScript中添加了“PageMethods”。前面。

事情是这样的:

HTML:

<div> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <asp:TextBox ID="txtValue" runat="server" CssClass="value"></asp:TextBox> 
    <asp:Button ID="btnShow" runat="server" CssClass="buttonshow" Text="Sow Records without PostBack" /> 

</div> 

<script language="javascript" type="text/javascript"> 

    //attach event to click event of button with class of 'buttonshow'. 
    $('.buttonshow').click(function() 
    { 
     //get value of textbox with class 'value' 
     var NoOfRecords = $('.value').val(); 

     //Call GetCustomer method, pass NumberOfRecords, and define the onsuccess and onerror functions. 
     PageMethods.GetCustomer(
      NoOfRecords, 
      function(result) { 
       alert('success:' + result); 
      }, 
      function(result) { 
       alert('error:' + result.get_message()); 
      }); 
    }); 


</script> 
<asp:GridView ID="GvDetails" runat="server"> 
</asp:GridView> 
+0

喜杰里米 跟我一样,现在我已经把更新面板两个按钮和GridView的,也是我取得的EnablePageMethods =“真“,但出现此错误 PageMethods'未定义 – Zerotoinfinity 2010-04-04 10:11:13

+0

使用更新面板方法,不需要启用页面方法。您不需要[WebMethod]或[ScriptService]属性,并且不需要任何JavaScript。只需将按钮和网格粘贴到更新面板中,然后为绑定到网格的按钮创建服务器端单击事件。 – Jeremy 2010-04-04 18:35:23

+0

谢谢Jeremy,但请让我知道,如果我不想使用更新面板,是否必须使用JSON,JQUERY。 和 那么在哪种情况下,我会使用JSON&JQUERY? – Zerotoinfinity 2010-04-05 18:21:02

首先你需要给方法加ScriptService属性。为了传递参数,你需要将它编码为字符串:3 mistakes to avoid when using jQuery with ASP.NET AJAX