2010-05-26 74 views
3

我正在將jquery fullcalendar整合到我的應用程序中。 這裏是我使用的代碼:返回Json在asp.net中導致保存文件對話框mvc

中的Index.aspx

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#calendar').fullCalendar({ 
      events: "/Scheduler/CalendarData" 
     }); 
    }); 
</script> 

<div id="calendar"> 
</div> 

這裏是調度/的CalendarData代碼:

public ActionResult CalendarData() 
    { 

     IList<CalendarDTO> tasksList = new List<CalendarDTO>(); 

     tasksList.Add(new CalendarDTO 
     { 
      id = 1, 
      title = "Google search", 
      start = ToUnixTimespan(DateTime.Now), 
      end = ToUnixTimespan(DateTime.Now.AddHours(4)), 
      url = "www.google.com" 
     }); 
     tasksList.Add(new CalendarDTO 
     { 
      id = 1, 
      title = "Bing search", 
      start = ToUnixTimespan(DateTime.Now.AddDays(1)), 
      end = ToUnixTimespan(DateTime.Now.AddDays(1).AddHours(4)), 
      url = "www.bing.com" 
     }); 

     return Json(tasksList,JsonRequestBehavior.AllowGet); 
    } 

    private long ToUnixTimespan(DateTime date) 
    { 
     TimeSpan tspan = date.ToUniversalTime().Subtract(
     new DateTime(1970, 1, 1, 0, 0, 0)); 

     return (long)Math.Truncate(tspan.TotalSeconds); 
    } 

    public ActionResult Index() 
    { 
     return View("Index"); 
    } 

我也有內部頭下面的代碼標籤在site.master:

<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server" /> 
<link href="<%= Url.Content("~/Content/jquery-ui-1.7.2.custom.css") %>" rel="stylesheet" type="text/css" /> 
<link href="~Perspectiva/Content/Site.css" rel="stylesheet" type="text/css" /> 
<link href="~Perspectiva/Content/fullcalendar.css" rel="stylesheet" type="text/css" /> 
<script src="~Perspectiva/Scripts/jquery-1.4.2.js" type="text/javascript"></script> 
<script src="~Perspectiva/Scripts/fullcalendar.js" type="text/javascript"></script> 
<script src="/Scripts/MicrosoftAjax.debug.js" type="text/javascript"></script> 
<script src="/Scripts/MicrosoftMvcAjax.debug.js" type="text/javascript"></script> 

我所做的一切都非常複製f rom http://szahariev.blogspot.com/2009/08/jquery-fullcalendar-and-aspnet-mvc.html

當瀏覽到/ scheduler/calendardata我得到一個提示保存JSON數據,其內容正是我在CalendarData函數中創建的。

爲了正確渲染頁面,我需要做些什麼?

由於提前,

葉蘭

更新:繼符文的和弗郎的意見,我添加了一個名爲CalendarData.aspx觀點是一致的Index.aspx。結果:

  • 導航到/ scheduler/calendardata 仍然給我保存文件對話框。
  • 導航到/ scheduler/index我得到 以下運行時錯誤在Visual Studio:Microsoft JScript運行時 錯誤:對象預期。 VS 突出顯示代碼在腳本標記中的 $(document).ready(function()...) 。
+0

如果您還沒有更改其他任何內容,添加CalendarData.aspx視圖不會更改任何內容,因爲沒有操作返回該視圖。 導航到/ scheduler/index時可能看到的是正確的頁面,但它有一個javascript錯誤。看起來你的ASP.NET MVC的東西(視圖和操作)現在是正確的,但是JavaScript有問題。嘗試使用FireFox或Chrome訪問/ scheduler/index並進一步調查js錯誤,可能使用FireFug的FireBug插件 – Rune 2010-05-26 20:55:43

+0

您是否曾經修復過這個問題?我現在有這個問題,似乎無法克服它。 – joshlrogers 2010-07-27 19:58:12

+0

我已經觸摸了這段代碼已經有一段時間了,但是如果我沒有記錯的話,解決方案是將所有到css和js文件的鏈接放在aspx文件中而不是母版頁中,並使用Url.Content()對它們進行編碼。希望這可以幫助! – Eran 2010-08-19 21:28:41

回答

0

您需要導航到映射到返回Index.aspx的操作的URL而不是映射到CalendarData()的URL。我認爲這將是「/ scheduler」。當你轉到「/ scheduler/calenderData」時,服務器會將Json數據直接返回給瀏覽器。

+0

感謝您的評論。請在帖子中看到更新。 (葉蘭) – Eran 2010-05-26 20:39:28

0

如果您在瀏覽器中導航到/scheduler/calendarData,瀏覽器會收到Content-Type: application/json的響應。某些瀏覽器不知道如何顯示此類內容類型,因此它們允許您將內容保存爲本地文件,以便您可以在其他程序中查看它。

您應該導航到您的瀏覽器到/scheduler/index,而不是返回一個人類可讀的結果,可以由所有瀏覽器呈現(具有Content-Type: text/html)。

如果你想看到調試目的通過CalendarData返回的內容,你有兩個選擇:

  • 使用的瀏覽器能夠理解Content-Type: application/json
  • 使用工具,如Fiddler,它允許你檢查HTTP流量
0

嘗試使用JSonResult而不是ActionResult。

0

我有同樣的問題,我錯過了基本的ActionResult,返回視圖開始......?我認爲這是更深層次的東西......但這裏有一些基本的事情來檢查,解決了我的問題;

in my Homecontroller;

public ActionResult Index() 
    { 
     ViewData["Message"] = "Whatever!!! just work!"; 

     return View(); 
    } 
全球

,我也只好refix我maproutes恢復爲默認,因爲我是roting到的GetData操作時嘗試的事情來解決它:

routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
); 
1

嘗試使用JSonResult,而不是一個ActionResult的。

public JSonResult CalendarData() 
{ 
    IList<CalendarDTO> tasksList = new List<CalendarDTO>(); 

    tasksList.Add(new CalendarDTO 
    { 
     id = 1, 
     title = "Google search", 
     start = ToUnixTimespan(DateTime.Now), 
     end = ToUnixTimespan(DateTime.Now.AddHours(4)), 
     url = "www.google.com" 
    }); 
    tasksList.Add(new CalendarDTO 
    { 
     id = 1, 
     title = "Bing search", 
     start = ToUnixTimespan(DateTime.Now.AddDays(1)), 
     end = ToUnixTimespan(DateTime.Now.AddDays(1).AddHours(4)), 
     url = "www.bing.com" 
    }); 

    return Json(tasksList, JsonRequestBehavior.AllowGet); 
} 
0

我已經得到了這個,而無需最終用戶經歷瘋狂的事情來工作的唯一方法是改變內容類型,以在返回「text/html的」。

我已經嘗試了上面的所有建議,以及其他一些。

哎呀,我甚至試過this

相關問題