0

我想使用 ajax 从 jQuery 向 c# 发送数据(注意:我正在向同一页面发送请求)。我正在关注本教程http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

注意:这是 SharePoint 2010 webpart 解决方案上的 asp.net 3.5。

这是我的jQuery代码:

$.ajax({
    type: "POST",
    url: getURLWithoutQuery() + "/saveOrder",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) {
        alert(msg.d);
    }
});

// return the url of the current page without any query parameters
function getURLWithoutQuery() {
    return location.protocol + '//' + location.host + location.pathname;
}

在 c# 中,主文件是PDFLibraryUserControl.ascx.cs. 这是具有Page_Load功能的。

但是我有另一个名为的类文件SaveStructure.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI;
using System.Web.Services;

namespace PDFLibrary.PDFLibrary
{
    public partial class SaveStructure : Page
    {
        [WebMethod]
        public static int saveOrder()
        {
            return 1234;
        }
    }
}

我希望得到一个警告说1234,但我得到了这个:

在此处输入图像描述

它与saveOrder位于主文件之外的另一个文件上的函数有关吗?或者我的网址不正确?我不想在其中对 URL 进行硬编码,因为当前页面是 aspx 页面,并且还包含用于发送 POST(到同一页面)的 jQuery 代码。

有谁知道出了什么问题并可以解决这个问题?

4

1 回答 1

0

将页面方法放在用户控件中是一个坏主意,因为最大的问题是用户控件不能像.aspx页面一样通过脚本(阅读:jQuery)直接访问。如果您仅限于将此逻辑放在用户控件中,那么我的建议是创建一个 Web 服务 ( .asmx),它将执行页面方法将要执行的逻辑。可以通过 jQuery.ajax()方法直接访问 Web 服务,如下所示:

Code from myService.asmx:
[WebMethod]
public static int saveOrder()
{
    return 1234;
}

Code in SharePoint .aspx page:
<script type="text/javascript">
    $(document).ready(function() {
        $.ajax({
            type: "POST",
            url: "myService.asmx/saveOrder",
            contentType: "application/json; charset=utf-8",
            data: "{}",
            dataType: "json",
            success: handleSuccess,
            error: handleError
        });
    });

    function handleSuccess(data, status) {
        // Do something with successful data retrieval
    }

    function handleError(xmlRequest) {
        // Do something with error
    }
</script>
于 2013-06-27T02:33:18.683 回答