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

标签 c# javascript jquery ajax

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

解决方案中的文件 1.仪表板.aspx 2. JavaScript/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 时,您将从代码隐藏方法返回 XML,并且您可能需要了解 data.d。

首先,您需要非常流行且强大的 JSON.NET用于轻松将 XML 序列化为 JSON 的 lib。我不认为 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 的情况。即使您只返回标量返回值,例如字符串、整数或 bool 值,结果将始终包含在“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 服务更适合在项目中组织 ajax 调用的代码,并且 Web 服务似乎更适合处理解析 ajax 请求和响应,而不是从代码隐藏中处理,尽管后者是一种猜测,并且 ASP.NET 可以处理具有 WebMethod 属性的方法完全相同的方式,无论是在代码隐藏中还是在 Web 服务中,但是代码的组织是在 Web 服务中实现 getDataByDate 而不是代码隐藏的充分理由,因为它本身没有“连接”到您的 aspx 页面,并且可能需要在多个页面中调用。它很容易实现,只需创建一个 services 文件夹,添加一个新的 Web 服务,将其命名为您想要的任何名称,将我答案中的相同代码复制并粘贴到 Web 服务类中,删除关键字 static,并将您的 ajax url 更改为“/services/[yourwebserivcename].asmx/getDataByDate”。

PS,我知道我的代码可以在网络服务中运行,不太确定后面的代码,但它应该可以运行。

PSS,由于是公共(public)方法,所以将web方法大写更合适,所以getDataByDate应该是GetDataByDate

关于c# - 从 jQuery 在 C# 背后的代码中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19782043/

相关文章:

javascript - 我正在尝试用 php 回应 javascript

c# - 为什么编码对象不保留在 native 代码中修改的值?

c# - Expression.Lambda 泛型中的非特定类型

c# - 在 Entity Framework 中通过原始 SQL 查询获取复杂对象

javascript - 如何使标签可见/不可见?

javascript - 文件格式或文件扩展名无效

c# - 如何在不使用 threadPool 和使用 EventWaitHandler 进行处理的情况下运行线程束中的进程数

javascript - jQuery- 隐藏表 -> 重新加载页面后,我的表显示了几秒钟

javascript - 根据部分元素响应解析JSON数据

jquery - 按下 Enter 键时运行 Jquery 方法