我想在javascript ajax调用中在aspx页面中调用我的webmethod(C#方法)。 所以在URL中我可以传递Test.aspx / MyMethodName
[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public static string Loadsites() {
var jsondata = JsonConvert.SerializeObject(lstsitename);
// test.Visible = true; return jsondata;
}
$(document).ready(function () {
LoadGrid = function () {
alert('Loading Grid data');
jQuery("#Grid").jqGrid({
mtype: 'POST',
url: 'Test.aspx/Loadsites',
contentType: "application/json; charset=utf-8",
dataType: "json",
colNames: ['SiteName', 'Description' ],
colModel: [
{ name: 'SiteName', index: 'SiteName' },
{ name: 'Description', index: 'Description' }
],
sortname: "SiteName",
rowNum: 10,
viewrecords: true,
sortorder: "asc",
caption: "Site Details",
width: "auto",
height: "auto",
pager: '#Pager'
});
jQuery("#Grid").jqGrid('navGrid', '#Pager', { edit: true, add: true, del: true });
}
});
我在方法中尝试静态,但也没有工作
答案 0 :(得分:0)
如果将此属性[WebMethod]
放在方法签名之上,则可以实现所需。
此外,您的方法应定义为static
。
答案 1 :(得分:0)
双方都有错误(在服务器端和客户端)。
在服务器端,您声明string
作为Loadsites
的结果,并明确地致电JsonConvert.SerializeObject
。这是不对的。设计WebMethod
是为了转换为JSON或XML 内部。因此,应该返回object
(仅return lstsitename
;)而不是string
。 WebMethod
会根据HTTP请求的contentType
将结果转换为JSON。如果再次调用JsonConvert.SerializeObject
,则返回的数据是包含引号的字符串,例如[{"myCol1": "value1"}]
。由于JSON标准,此类字符串将再次转换为JSON ,并且从服务器返回的结果数据将类似于"[{\"myCol1\": "value1\"}]"
。转换正确的JSON数据[{"myCol1": "value1"}]
将在客户端的JavaSript中获取对象数组。解析两次转换后的数据"[{\"myCol1\": "value1\"}]"
将生成字符串 '[{"myCol1": "value1"}]'
而不是对象数组。
客户端也存在一些重要错误(在创建jqGrid的JavaScript代码中):
dataType: "json"
代替datatype: "json"
。因此,jqGrid将使用默认值datatype: "xml"
,这是错误的。contentType: "application/json; charset=utf-8"
而不是使用允许指定Ajax选项的ajaxGridOptions
:ajaxGridOptions: { contentType: "application/json; charset=utf-8" }
loadonce: true
选项。LoadGrid
而未声明变量,并且您未在$(document).ready(...);
内调用该函数。而不是你应该只执行创建jqGrid的相应代码并通过调用navGrid
添加导航栏。