Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在jQuery中调用C#方法?_C#_Asp.net_Jquery - Fatal编程技术网

如何在jQuery中调用C#方法?

如何在jQuery中调用C#方法?,c#,asp.net,jquery,C#,Asp.net,Jquery,我正在使用一个图表,它应该从C#获得输入,用于绘制图表。我使用JSON将值从C#返回到jQuery。不管怎样,这对我没有帮助,我做错了什么 这是我的aspx代码: $(文档).ready(函数(){ var source={}; $.ajax({ 键入:“POST”, 数据类型:“json”, url:“Default.aspx/getall”, contentType:'application/json;charset=utf-8', cache:false, 成功:功能(响应){ sour

我正在使用一个图表,它应该从C#获得输入,用于绘制图表。我使用JSON将值从C#返回到jQuery。不管怎样,这对我没有帮助,我做错了什么

这是我的aspx代码:


$(文档).ready(函数(){
var source={};
$.ajax({
键入:“POST”,
数据类型:“json”,
url:“Default.aspx/getall”,
contentType:'application/json;charset=utf-8',
cache:false,
成功:功能(响应){
source=$.parseJSON(response.d);
},
错误:函数(err){
警报(“错误”);
}
});
这是我的C代码:

公共类样本数据
{
公共字符串Day{get;set;}
公共int Keith{get;set;}
公共整数Erica{get;set;}
公共int{get;set;}
}
公共部分类\u默认值:System.Web.UI.Page
{
列表s=新列表();
受保护的无效页面加载(对象发送方、事件参数e)
{
s、 添加(新样本数据{Day=“星期一”,基思=20,埃里卡=15,乔治=25});
s、 添加(新样本数据{Day=“星期二”,基思=25,埃里卡=20,乔治=35});
会话[“数据”]=s;
}
[网络方法]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
公共静态列表getall()
{
List data=(List)HttpContext.Current.Session[“data”];
返回数据;
}
}

您可以使用PageMethods来代替ajax回发:

在C#页中:

[WebMethod]
公共静态列表getall()
{
List data=(List)HttpContext.Current.Session[“data”];
返回数据;
}
在aspx页面中:

$(文档).ready(函数(){
var data=PageMethods.getall(OnSuccess);
函数OnSuccess(){
警惕(“成功”);
}
});
要使用PageMethods,您还需要在表单标记中添加以下内容:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />

我测试了您的代码,似乎一切都很好,只是我将列表序列化为字符串并返回

$(窗口)。加载(函数(){
$.ajax({
类型:“POST”,
url:“PageMethodTest.aspx/getall”,
数据:“{}”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:fnsuccescallback,
错误:fnerrorcallback
});
});
函数btnclick(){}
函数fnsuccesscallback(数据){
警报(数据d);
}
函数fnerrorcallback(结果){
警报(结果.状态文本);
}
服务器端代码:

[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
公共静态字符串getall()
{
List data=(List)HttpContext.Current.Session[“data”];
JavaScriptSerializer js=新的JavaScriptSerializer();
返回js.Serialize(数据);
//返回数据;
}
结果是:


您可以改进将输出用作图形源的方法。

如果您不想依赖Microsoft的AJAX实现(
WebMethodAttribute
ScriptManager
,不得不担心响应的
.d
属性等),您可以使用ASHX处理程序进行干净的JSON调用。您需要自己做一些工作,但您可以通过使用更传统的AJAX来摆脱WebForms的控制

例如,C#piece如下所示(注意
IRequiresessionState
实现,它使您的会话可用):

您的javascript调用将只是对这个
something.ashx
文件的调用:

jQuery.ajax({
    url: "something.ashx",
    type: "post",
    dataType: "json"
}).done(function(result) {
    console.log(result);
});
您没有任何POST参数,但如果有,您只需在调用中包含它们,并直接从处理程序中的
请求中读取它们:

jQuery.ajax({
    ...
    data: { requestMessage: "Hello!" }
});


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

您是否成功地尝试了
console.log(response)
?我认为您正在将此方法作为web服务调用。您需要添加web服务来调用getallQuick question,我正在尝试理解它,但无法理解
.done(函数(结果))中返回的内容
's
result
变量。@CodeIt
done
函数的参数是一个包含AJAX调用结果的函数,其类型为您要求的类型。在本例中,
dataType
字段设置为
json
,这意味着jQuery将足够智能,可以查看来自服务器的结果,而我,并将其转换为JSON表示的对象。例如,如果您的服务器发送
{“name”:“John”}
,则
result
实际上将是一个javascript对象
{name:“John”}
。关于使用jQuery AJAX的很多方法。很好的解释@Joe Enos。以及服务器应该如何发送
json
响应?我发现这个答案非常独特和简洁,所以我正在尝试深入研究。如果我是个书呆子的话,很抱歉。@code服务器可以按照自己的意愿构建json。在我的回答示例中,它使用了
JsonConvert.SerializeObject
方法,它是.NET中最常见的JSON库JSON.NET库的一部分,然后它将JSON和内容类型直接写入响应。ASP.NET MVC有一个内置方法(
JSON
方法)其他服务器框架也会有自己的方式来完成这项工作——您必须查看PHP或Rails文档或其他任何文档,以找出最佳方式。
jQuery.ajax({
    ...
    data: { requestMessage: "Hello!" }
});


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