如何在jquery中调用c#方法?

我正在使用一个图表,它应该从c#获取输入以绘制图形。 我正在使用Json将值从c#返回到jquery。 但它对我没有帮助。 提前致谢。 你能找到我错的地方吗?

这是我的aspx代码

script type="text/javascript"> $(document).ready(function () { var source = {}; $.ajax({ type: 'POST', dataType: 'json', url: "Default.aspx/getall", contentType: 'application/json; charset=utf-8', cache: false, success: function (response) { source = $.parseJSON(response.d); }, error: function (err) { alert('Error'); } }); 

这是我的cs代码

 public class sampledata { public string Day { get; set; } public int Keith { get; set; } public int Erica { get; set; } public int George { get; set; } } public partial class _Default : System.Web.UI.Page { List s = new List(); protected void Page_Load(object sender, EventArgs e) { s.Add(new sampledata { Day = "monday", Keith = 20, Erica = 15, George = 25 }); s.Add(new sampledata { Day = "tuesday", Keith = 25, Erica = 20, George = 35 }); Session["data"] = s; } [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public static List getall() { List data = (List)HttpContext.Current.Session["data"]; return data; } } 

我测试了你的代码。 一切似乎都很好,除了我将List序列化为一个字符串并返回。

  $(window).load(function () { $.ajax({ type: "POST", url: "PageMethodTest.aspx/getall", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", success: fnsuccesscallback, error: fnerrorcallback }); }); function btnclick() { } function fnsuccesscallback(data) { alert(data.d); } function fnerrorcallback(result) { alert(result.statusText); } 

服务器代码:

 [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public static String getall() { List data = (List)HttpContext.Current.Session["data"]; JavaScriptSerializer js = new JavaScriptSerializer(); return js.Serialize(data); //return data; } 

结果是

在此处输入图像描述

您可以改进使用输出作为图表的来源。

您可以使用PageMethods而不是ajax回发

在C#页面中

  [WebMethod] public static List getall() { List data = (List)HttpContext.Current.Session["data"]; return data; } 

在aspx页面中

 $(document).ready(function () { var data=PageMethods.getall(OnSuccess); function OnSuccess() { alert("Success"); } }); 

并且对于使用PageMethod,您还需要在表单标记中添加它

  

如果您不想依赖Microsoft的AJAX实现( WebMethodAttributeScriptManager ,不得不担心响应的.d属性等),您可以使用ASHX处理程序进行干净的JSON调用。 你必须自己做一些工作,但是你可以通过做更传统的AJAX从WebForms的拇指下来。

对于您的示例,C#片段如下(注意IRequiresSessionState实现,它使您的会话可用):

 // something.ashx.cs public class something : IHttpHandler, IRequiresSessionState { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "application/json"; context.Response.Write(JsonConvert.SerializeObject(context.Session["data"])); } public bool IsReusable { get { return false; } } } 

你的javascript调用只是调用这个something.ashx文件:

 jQuery.ajax({ url: "something.ashx", type: "post", dataType: "json" }).done(function(result) { console.log(result); }); 

您没有任何POST参数,但如果您这样做,则只需将它们包含在您的调用中,并直接从处理程序中的Request中读取它们:

 jQuery.ajax({ ... data: { requestMessage: "Hello!" } }); public void ProcessRequest(HttpContext context) { string requestMessage = context.Request["requestMessage"]; // Hello! ...etc... }