2016-07-31 69 views
0

我已經能夠得到FullCalendar在我的網頁加載,但我似乎無法對我的測試JSON數據成功地傳遞到日曆,並將它呈現事件。我不確定我做錯了什麼。如何在ASP.NET MVC中從JSON在FullCalendar中呈現事件?

我下面這個website's example,我甚至下載他們的源代碼,並能夠在我的開發環境中成功運行它。我的代碼似乎幾乎完全鏡像他們的,但我仍然無法呈現事件。我甚至回去並將JavaScript文件添加到我的軟件包中,以防萬一是這個問題,但沒有成功。

任何想法?

捆綁:

public class BundleConfig 
{ 
    // For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862 
    public static void RegisterBundles(BundleCollection bundles) 
    { 
     bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
        "~/Scripts/jquery-{version}.js")); 

     bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
        "~/Scripts/jquery.validate*")); 

     // Use the development version of Modernizr to develop with and learn from. Then, when you're 
     // ready for production, use the build tool at http://modernizr.com to pick only the tests you need. 
     bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
        "~/Scripts/modernizr-*")); 

     bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
        "~/Scripts/bootstrap.js", 
        "~/Scripts/respond.js")); 

     bundles.Add(new StyleBundle("~/Content/css").Include(
        "~/Content/bootstrap.css", 
        "~/Content/site.css", 
        "~/Content/themes/base/jquery.ui.all.css", 
        "~/Content/fullcalendar.css")); 

     /*Kendo UI Instructions that were followed 
     * http://docs.telerik.com/kendo-ui/aspnet-mvc/asp-net-mvc-5 
     */ 
     bundles.Add(new ScriptBundle("~/bundles/kendo").Include(
     "~/Scripts/kendo/2016.2.714/kendo.webcomponents.min.js", 
     // "~/Scripts/kendo/kendo.timezones.min.js", // uncomment if using the Scheduler 
     "~/Scripts/kendo/2016.2.714/kendo.aspnetmvc.min.js", 
     "~/Scripts/kendo/2016.2.714/jquery.min.js", 
     "~/Scripts/kendo/2016.2.714/kendo.ui.core.min.js", 
     "~/Scripts/kendo/2016.2.714/kendo.calendar.min.js", 
     "~/Scripts/kendo/2016.2.714/kendo.popup.min.js", 
     "~/Scripts/kendo/2016.2.714/kendo.datepicker.min.js")); 

     bundles.Add(new StyleBundle("~/Content/kendo/css").Include(
      "~/Content/kendo/2016.2.714/kendo.common-bootstrap.min.css", 
      "~/Content/kendo/2016.2.714/kendo.bootstrap.min.css", 
      "~/Content/kendo/2016.2.714/kendo.common.min.css", 
      "~/Content/kendo/2016.2.714/kendo.defualt.min.css")); 

     bundles.Add(new ScriptBundle("~/bundles/fullcalendar").Include(
      "~/Scripts/jquery-ui-1.12.0.min.js", 
      "~/Scripts/moment.min.js", 
      "~/Scripts/fullcalendar.min.js")); 

     bundles.IgnoreList.Clear(); 


    } 

_layout:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <title>Time Zone Event Calendar</title> 
    @Styles.Render("~/Content/kendo/css") 
    @Styles.Render("~/Content/css") 
    @Scripts.Render("~/bundles/modernizr") 
    @Scripts.Render("~/bundles/jquery") 
    @Scripts.Render("~/bundles/kendo") 
    @Scripts.Render("~/bundles/fullcalendar") 

</head> 
<body> 
    <div class="navbar navbar-inverse navbar-fixed-top"> 
     <div class="container"> 
      <div class="navbar-header"> 
       <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
       </button> 
       @Html.ActionLink("Time Zone Event Calendar", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) 
      </div> 
      <div class="navbar-collapse collapse"> 
       <ul class="nav navbar-nav"> 
        <li>@Html.ActionLink("Home", "Index", "Home")</li> 
        <li>@Html.ActionLink("About", "About", "Home")</li> 
        <li>@Html.ActionLink("Contact", "Contact", "Home")</li> 
       </ul> 
      </div> 
     </div> 
    </div> 
    <div class="container body-content"> 
     @RenderBody() 
     <hr /> 
     <footer> 
      <p>&copy; @DateTime.Now.Year - Time Zone Event Calendar</p> 
     </footer> 
    </div> 


    @Scripts.Render("~/bundles/bootstrap") 
    @RenderSection("scripts", required: false) 
</body> 
</html> 

指數:

@{ 
    ViewBag.Title = "Home Page"; 
} 
<head> 
    @section scripts{ 
     <script type="text/javascript"> 
      $(document).ready(function() 
      { 
       $('#calendar').fullCalendar(
       { 
        header: 
        { 
         left: 'prev,next today', 
         center: 'title', 
         right: 'month,agendaWeek,agendaDay' 
        }, 
        editable: false, 
        events: "/home/loadevents/" 

       }) 
      }); 
     </script> 

     <script type="text/javascript"> 
      $(document).ready(function() { 

       $("#pickDateTime").kendoDateTimePicker({ 
        culture: "es-Es", 
        interval: 1, 
        format: "yyyy/MM/dd hh:mm tt", 
        parseFormats: ["MMMM yyyy", "HH:mm"] 

       }); 

      }); 
     </script> 
    } 
</head> 

<body> 
    <div id="headerBar"> 
     <div id="datepicker"> 
      <form method="post"> 
       <input id="pickDateTime" name="DateTimePicker" /> 
       <input type="submit" value="Add" /> 
      </form> 
     </div> 
    </div> 

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


</body> 

的HomeController:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult About() 
    { 
     ViewBag.Message = "Your application description page."; 

     return View(); 
    } 

    public ActionResult Contact() 
    { 
     ViewBag.Message = "Your contact page."; 

     return View(); 
    } 

    public ActionResult LoadEvents (double start, double end) 
    { 
     var fromDate = ConvertFromUnixTimestamp(start); 
     var toDate = ConvertFromUnixTimestamp(end); 

     var eventList = GetEvents(); 

     var rows = eventList.ToArray(); 

     return Json(rows, JsonRequestBehavior.AllowGet); 
    } 

    private List<CalendarEventsViewModel> GetEvents() 
    { 
     List<CalendarEventsViewModel> eventList = new List<CalendarEventsViewModel>(); 

     CalendarEventsViewModel newEvent = new CalendarEventsViewModel 
     { 
      ID = "1", 
      EventName = "Event 1", 
      StartDateString = DateTime.Now.AddDays(1).ToString("s"), 
      EndDateString = DateTime.Now.AddDays(1).ToString("s"), 
      AllDay = false 
     }; 


     eventList.Add(newEvent); 

     newEvent = new CalendarEventsViewModel 
     { 
      ID = "1", 
      EventName = "Event 3", 
      StartDateString = DateTime.Now.AddDays(2).ToString("s"), 
      EndDateString = DateTime.Now.AddDays(3).ToString("s"), 
      AllDay = false 
     }; 

     eventList.Add(newEvent); 

     return eventList; 
    } 

    private static DateTime ConvertFromUnixTimestamp(double timestamp) 
    { 
     var origin = new DateTime(1970, 1, 1, 0, 0, 0, 0); 
     return origin.AddSeconds(timestamp); 
    } 

} 

CalendarEventsViewModel:

public class CalendarEventsViewModel 
{ 
    public string ID { get; set; } 
    public string EventName { get; set; } 
    public string EventText { get; set; } 
    public string StartDateString { get; set; } 
    public string EndDateString { get; set; } 
    public bool AllDay { get; set; } 
} 
+0

您正在使用哪個版本的fullcalendar? –

回答

2

我想你已經做了我,當我第一次設置了同樣的錯誤,你正在尋找只有示例適用於一個版本FullCalendar的。在版本2中,它不是您的LoadEvents操作收到的unix時間戳。

這是一個傳遞給動作的時刻對象,如果你刪除了ConvertFromUnixTimestamp方法並將開始和結束參數從double改爲DateTime,我認爲它會開始工作。

如果你打破不使我非常有信心它甚至沒有被稱爲任何更改指向您的LoadEvents行動。

你的屬性名稱應與那些event object的,否則它會像對待非標領域。

+0

我甚至沒有注意到庫的版本。我做出了改變,似乎沒有任何事情發生。我檢查了這個動作,它被javascript調用,但它仍然沒有顯示事件。 –

+0

當您檢查頁面時,是在FullCalendar腳本之前加載的jQuery和Moment腳本? –

+0

我覺得你的事件對象的屬性名應當符合實際的事件對象http://fullcalendar.io/docs1/event_data/Event_Object/ 你傳遞一個JSON的飼料,它會看到你的當前屬性爲非標準領域。更新它以匹配它們,你可能會獲得更多的成功。 –

相關問題