我想要做的是,我有一个Web服务,以json格式返回产品数量(来自示例Northwind数据库),我想将返回的行绑定到我的jqGrid。我试过JQGrid - Cannot call ASP.NET WebMethod but can with Ajax 但它对我的网络服务不起作用。
然后只是为了一个试验,我在同一个aspx页面上写了[Web方法]我正在创建jqGrid然后它确实适用于mtype:“POST”。以下是我的代码。
ASPX中的代码:
<script language="javascript" type="text/javascript">
$(function () {
jQuery("#jqGridXML").jqGrid({
url: "jqGridXML.aspx/GetProducts",
mtype: "POST",
ajaxGridOptions: { contentType: "application/json; charset=utf-8" },
datatype: "json",
serializeGridData: function (postData) {
return JSON.stringify(postData);
},
jsonReader: {
root: function (obj) { return obj.d;},
page:function (obj) {return 1;},
total: function (obj) {return 1;},
records:function (obj) { return obj.d.length;},
id:"0",
cell:"",
repeatitems:false
},
datatype:"json",
height:250,
colName:['ProductId','ProductName','UnitsInStock'],
colModel:[{name:'ProductId',index:'ProductId',width:100},
{name:'ProductName',width:100},
{name:'UnitsInStock',width:100}],
caption:"Products"
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<table id="jqGridXML"></table>
<div id="pagerXML"></div>
</form>
</body>
.cs文件中的代码
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static List<Products> GetProducts()
{
Products product = new Products();
return product.GetProducts();
}
这是有效但如果我不想在表单中编写Web方法。我已将web引用添加到我的应用程序中,并希望使用来自Web服务的数据。我在jqGrid下面尝试但没有帮助我。
$(function () {
jQuery("#jqGridXML").jqGrid({
url: "http://localhost:49493/jqGrid_HttpHandlers/WebService.asmx/GetProducts",
mtype: "POST",
休息部分相同。
网络服务中的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;
using System.Collections.Generic;
using System.Collections.ObjectModel;
/// <summary>
/// Summary description for WebService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService
{
public WebService()
{
//Uncomment the following line if using designed components
//InitializeComponent();
}
[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
public static List<Products> GetProducts()
{
Products product = new Products();
return product.GetProducts();
}
}
你能帮我理解一下吗?我刚开始研究jqGrid。
非常感谢您的帮助。
编辑
是的,你是对的戴夫。我只是取消注释下面的语句并删除静态并运行项目而不做任何修改,它确实工作得很好。
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService
谢谢,但我的下一个疑问是,我如何使用jqGrids导航功能,如Paging,使用相同的代码对这些内容进行排序。 我用过这个,
jsonReader: {
root: function (obj) { return obj.d;},
page:function (obj) {return 1;},
total: function (obj) {return 1;},
records:function (obj) { return obj.d.length;},
id:"0",
但我真的不知道在我的代码中需要使用哪一个。你能否请我转发正确的解决方案。
答案 0 :(得分:0)
您需要取消注释[ScriptService]
属性(并且大多数其他装饰都是不必要的)。而且,该方法不能是静态的。 That's only necessary when you declare the methods in ASPX code behind
所以,像这样:
[WebService]
[ScriptService]
public class WebService : System.Web.Services.WebService
{
[WebMethod]
public List<Products> GetProducts()
{
Products product = new Products();
return product.GetProducts();
}
}