2010-04-28 64 views
0
$('#calendar').fullCalendar 
     (

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

      } 
     ) 

calender.aspx是頁面和getcddialog是函數返回類型是行得結合壓延機陣列。需要幫助如何調用C#函數返回類型爲jQuery的數組

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>(); 
} 
+0

您使用的是webforms還是mvc? – 2010-04-28 14:56:09

回答

2

就我所知,你不能在這種方式下調用ASP.NET Webforms頁面上的函數。原諒我,我假設這是一個Webforms應用程序。如果這是一個ASP.NET MVC應用程序中的Calender.aspx [原文]頁是針對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服務方法嗎?看起來這就是你可能要去的地方。

編輯:好吧,我做了一點概念證明,希望你能適應你的項目/解決方案。

我創建了一個ASP.NET Web表單(Visual Studio 2010中/ Web表單4)Default.aspx頁面上的以下方法應用:

[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屬性,以獲取返回數組的長度。

+0

如果GetCDCatalog更新爲pagemethod,則可以用類似的方式調用它。 – 2010-04-28 14:57:23

+0

啊,的確如此。很高興知道!它看起來像一個頁面方法只是添加了[WebMethod]屬性的方法(它看起來類似於一個經典的ASMX服務方法)?如果是這樣,這可能是對OP的一些幫助:http://www.singingeels.com/Articles/Using_Page_Methods_in_ASPNET_AJAX.aspx – 2010-04-28 15:05:31

+0

HI Jasho, 我不使用mvc,使用簡單的web表單,所以我不能使用這jsonresult。所以建議我我必須做什麼 – 2010-04-28 16:11:12

0

您需要提供json格式的結果,jquery,plugins已知並用於綁定數據。

您可以使用JSON.NET函數庫並用JSON包裝對象並返回到客戶端。

0

爲了使用jQuery調用頁面方法,該方法必須是靜態的,並有「System.Web.Services.WebMethod」屬性:

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

Here is a demonstration

1

您需要兩兩件事要做的是:

  • 使用頁面方法(的WebMethods)這裏是如何in Encosia
  • 其次,就像@Krunal Mevada說,你需要以JSON格式返回數據, JSON.NET是一個相當簡單的庫。