从jQuery在C#背后的代码中调用函数 - c#

我在Visual Studio 2008中有一个ASP Web应用程序。
我在文件夹中有jquery-1.10.2.js-JavaScriptBase

解决方案中的文件
1. Dashboard.aspx
2. JavaScripts / Dashboard.js

我有一个jQuery标签

<li><a href="#tabs-1" id="tab1" runat="server" onclick="GetData(0)">Today</a></li>
<li><a href="#tabs-2" id="tab2" runat="server" onclick="GetData(7)">1-7 days</a></li>
<li><a href="#tabs-3" id="tab3" runat="server" onclick="GetData(30)">30 days</a></li>
<li><a href="#tabs-4" id="tab4" runat="server" onclick="GetData(60)">60 days</a></li>
<li><a href="#tabs-5" id="tab5" runat="server" onclick="GetData(90)">90 days</a></li>
<li><a href="#tabs-6" id="tab6" runat="server" onclick="GetData(180)">180 days</a></li>

GetData()函数位于文件夹中的Dashboard.js内部-JavaScripts

function GetData(ky)
{
var params = "{'days' : '" + ky + "'}";   // if no params need to use "{}"
alert(params);
        $.ajax({
            url: "Dashboard.aspx/getDataByDate",
            type: 'POST',
            data: params,
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            success: function (data, status) {
                loadSuccess(data, status);
            },
            error: function () {
                alert("Oops! It's an Error");
            }
        });

        return false;
}

在我的代码后面

public string getDataByDate(string days)
        {
            DataSet ds = new DataSet();
            ds = getPatientVisitCount(DateTime.Today.ToString(), DateTime.Today.ToString()));
            return ds.GetXml();
        }

当我调用该函数时,它总是转到错误函数。

如何从js文件后面的代码中调用函数。请帮忙...

编辑1

我根据Grundy的建议更改了我的CS代码

[WebMethod()]
public string getDataByDate(string days)
{
DataSet ds = new DataSet();
ds = getPatientVisitCount(DateTime.Today.ToString(), DateTime.Today.ToString()));
return ds.GetXml();
}

仍然没有得到..

参考方案

我在这里注意到两件事,当您需要使用JSON并且可能需要了解data.d时,您正在从代码背后的方法返回XML。

首先,您将需要非常流行且强大的JSON.NET库,以便将XML轻松序列化为JSON。我认为System.Web.Script.Serialization.JavaScriptSerializer(您不使用过,我也不知道)是为处理XML到JSON而构建的,因此使用NUGET添加JSON.NET库,并且您的代码应为:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static object getDataByDate(string days)
{
    DataSet ds = new DataSet();
    ds = getPatientVisitCount(DateTime.Today.ToString(), DateTime.Today.ToString()));
    string json = Newtonsoft.Json.JsonConvert.SerializeXmlNode(ds.GetXml());
    return json;
}

如果您使用的是.NET 3.5,则即使您使用的是方法后面的代码而不是Web服务,也需要理解“ d”,为了安全起见:

“通过ASP.NET 3.5中通过ASP.NET AJAX扩展序列化所有ASMX服务JSON的情况就是这种情况。即使您仅返回标量返回值(例如字符串,int或布尔值),结果也将始终括在“ d”内。”参考:http://encosia.com/a-breaking-change-between-versions-of-aspnet-ajax/

因此,如果您使用的是.NET 3.5,则jQuey.ajax成功回调的实现必须为:

loadSuccess(data.d, status);

如果您使用的是.NET 4.0或更高版本,则无需担心“ d”。

您应该考虑将此实现转移到Web服务,它将几乎与我在答案中包含的代码相同。 Web服务是项目中更适合ajax调用的代码组织,并且Web服务似乎更适合处理ajax请求和响应,然后从后面的代码中进行解析,尽管后者是一种猜测,而ASP.NET可以使用WebMethod属性来处理方法。完全相同,无论是在代码背后还是在Web服务中,但代码的组织是在Web服务中实现getDataByDate而不是在代码背后实现代码的充分理由,因为它本身并未“连接”到您的aspx页面,并且可能需要在多个页面中被调用。这很容易实现,只需创建一个服务文件夹,添加一个新的Web服务,将其命名为任意名称,然后将我的答案中的相同代码复制并粘贴到Web服务类中,删除关键字static,并更改您的Ajax网址到“ / services / [您的网络域名] .asmx / getDataByDate”。

PS,我知道我的代码可以在Web服务中工作,虽然从后面的代码中不能确定,但​​是应该可以。

PSS,因为它是一个公共方法,所以将Web方法的大小写化更为合适,因此getDataByDate应该为GetDataByDate

Div单击与单选按钮相同吗? - php

有没有一种方法可以使div上的click事件与表单环境中的单选按钮相同?我只希望下面的div提交值,单选按钮很丑代码输出如下:<input id="radio-2011-06-08" value="2011-06-08" type="radio" name="radio_date&#…

将python scikit学习模型导出到pmml - python

我想将python scikit-learn模型导出到PMML。哪个python软件包最合适?我阅读了有关Augustus的内容,但是我无法使用scikit-learn模型找到任何示例。 python大神给出的解决方案 SkLearn2PMML是 JPMML-SkLearn命令行应用程序周围的薄包装。有关受支持的Scikit-Learn Estimator和…

如何使用PHP从动态输入字段捕获数组值? - javascript

我正在编写一个在线时间跟踪网页,允许用户将学习时间输入该系统。用户将首先输入名称,然后根据日期输入学习时间。一天中可能会有多个学习时间。以下是我第一页的编码,<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"…

SOAPFaultException部署在Tomcat上时,但在GlassFish中工作正常 - java

朋友们,我一直在尝试很多,阅读了很多论坛,但无法理解为什么出现此问题。我使用契约优先方法创建了一个Jax-WS WebService。创建WSDL和XSD,然后使用wsimport工具生成其余工件,为SEI提供实现。将WebService应用程序部署到Eclipse Helios中的GlassFish(Glassfish适配器和Eclipse中安装的插件)。…

调整窗口大小时如何调整YouTube播放器的大小 - php

我想显示包含YouTube视频的弹出窗口。我的问题是当用户调整弹出窗口的大小时如何调整YouTube播放器的大小?弹出窗口的头部分PHP / HTML代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/…