从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>
答
首先你需要给方法加ScriptService
属性。为了传递参数,你需要将它编码为字符串:3 mistakes to avoid when using jQuery with ASP.NET AJAX
喜杰里米 跟我一样,现在我已经把更新面板两个按钮和GridView的,也是我取得的EnablePageMethods =“真“,但出现此错误 PageMethods'未定义 – Zerotoinfinity 2010-04-04 10:11:13
使用更新面板方法,不需要启用页面方法。您不需要[WebMethod]或[ScriptService]属性,并且不需要任何JavaScript。只需将按钮和网格粘贴到更新面板中,然后为绑定到网格的按钮创建服务器端单击事件。 – Jeremy 2010-04-04 18:35:23
谢谢Jeremy,但请让我知道,如果我不想使用更新面板,是否必须使用JSON,JQUERY。 和 那么在哪种情况下,我会使用JSON&JQUERY? – Zerotoinfinity 2010-04-05 18:21:02