需要帮助如何调用c#函数,返回类型是jquery中的数组

时间:2010-04-28 14:45:18

标签: jquery

$('#calendar').fullCalendar
        (

            {
                editable: true,
                events:
                $.ajax
                (
                    {
                        type: "POST",
                        url: "Calender.aspx/GetCDCatalog",
                        contentType: "application/json; charset=utf-8",
                        data: "{}",
                        dataType: "json"
                    }
                )

            }
       )

calender.aspx是页面,getcddialog是函数,返回类型是不绑定日历的数组。

public CD[] GetCDCatalog()
{
    XDocument docXML =
    XDocument.Load(Server.MapPath("mydata.xml"));

    var CDs =
      from cd in docXML.Descendants("Table")
      select new CD
      {
          title = cd.Element("title").Value,
          star = cd.Element("star").Value,
          endTime = cd.Element("endTime").Value,

      };
    return CDs.ToArray<CD>();
}

4 个答案:

答案 0 :(得分:2)

据我所知,你不能以这种方式调用ASP.NET Webforms页面上的函数。原谅我,我假设这是一个Webforms应用程序。如果这是一个ASP.NET MVC应用程序,其中Calender.aspx [sic]页面是CalenderController的视图,您可以执行以下操作:

public JsonResult GetCDCatalog()
{
    // your logic
    return Json(CDs.ToList<CD>());
}

更多信息:http://geekswithblogs.net/michelotti/archive/2008/06/28/mvc-json---jsonresult-and-jquery.aspx

此外,是否可以将GetCDCatalog()方法转换为Web服务方法?看起来这就是你可能会去的地方。

编辑:好的,所以我做了一个概念验证,希望你能够适应你的项目/解决方案。

我在Default.aspx页面上使用以下方法创建了一个ASP.NET Webforms(Visual Studio 2010 / Webforms 4)应用程序:

    [WebMethod]
    public static string[] GetSomeThings(int numberOfThings)
    {
        List<string> strings = new List<string>();

        for (int i = 0; i < numberOfThings; ++i)
            strings.Add(i.ToString());

        return strings.ToArray<string>();
    }

在我的应用程序的Default.aspx页面上,我添加了以下jQuery:

(注意:您可能希望从不同的页面调用Calender.aspx页面,但只要它不是跨域的,它应该没问题。否则,您需要使用JSONP并添加回调=?到您要发布的URL的末尾。

    function GetSomeThingsUsingJSON() {
        $.ajax({
            url: 'default.aspx/GetSomeThings',
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            data: '{ "numberOfThings": 2 }',
            success: OnSuccess,
            error: OnError
        });            
    }

    function OnSuccess(data, textStatus, XMLHttpRequest) {
        $("span#json").text("The length of the array returned is " + data.d.length);
    }

    function OnError(XMLHttpRequest, textStatus, errorThrown) {
        $("span#json").text("An error occurred - " + textStatus);
    }

然后,我在页面加载(document.ready)上调用了GetSomeThingsUsingJSON()。它返回以下JSON:

{"d":["0","1"]}

我认为“d”是.NET惯例/烦恼。无论如何,要在OnSuccess方法中访问所需的数据,您需要引用您正在查找的数组的d属性,以便获取返回的数组的长度。

答案 1 :(得分:1)

你需要做两件事:

  • 使用页面方法(WebMethods)这里是in Encosia
  • 的方式
  • 其次,就像@Krunal Mevada所说,你需要以JSON格式返回数据,JSON.NET是一个非常简单的库。

答案 2 :(得分:0)

您需要以JSON格式提供结果,jQuery,插件和用于绑定数据的格式。

您可以使用JSON.NET库并将您的对象包装在JSON中并返回到客户端。

答案 3 :(得分:0)

为了使用jQuery调用页面方法,该方法必须是静态的并具有“System.Web.Services.WebMethod”属性:

[System.Web.Services.WebMethod]
public static CD[] GetCDCatalog()

Here is a demonstration