2

jQuery FullCalendar にイベントを入力するのにかなりの問題があります。

ブラウザ:IE8

技術: MVC 3 Razor

使用しているスクリプト: jquery-1.5.1、fullcalendar.js

コントローラーとサポート方法:(私の問題は、そもそもここに到達しないことですが)

     public JsonResult GetCalendarData()
    {
        List<CourseSection> courseSecs = //genarates list of course sections from db context
        var listOfEvents = new List<object>();

        foreach (CourseSection courseSec in courseSecs)
        {
            Course course = db.Course.Find(courseSec.CourseID);
            listOfEvents.Add(
            new
            {
                id = courseSec.ID,
                title = course.Name + "Section " + courseSec.Name,
                start = ToUnixTimespan(courseSec.sectionBeginDateAndDailyStartTime),
                end = ToUnixTimespan(courseSec.sectionEndDateAndDailyEndTime),
                allDay = false //none of the course sections run all day
            });
        }

        return Json(listOfEvents.ToArray(), JsonRequestBehavior.AllowGet);

    }
    private string ToUnixTimespan(DateTime date) //supporting method
    {
        TimeSpan tspan = date.ToUniversalTime().Subtract(
        new DateTime(1970, 1, 1, 0, 0, 0));

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

意見:

    @model Web.Models.Registration

     @{
     ViewBag.Title = "ViewSchedule";
     Layout = "~/Views/Shared/_SiteLayout.cshtml";
     }

     <script>
     $(document).ready(function () {
     // page is now ready, initialize the calendar...
     $('#calendar').fullCalendar({
              defaultView: "agendaWeek",
              year: 2013,
              month: 0,
              date: 25,
              minTime: 6,
              maxTime: 18,
              aspectRatio: 1.5,
              allDaySlot: false,
              events: "/Course/GetCalandarData"
              });
     });
     </script>


     <div class="wrapper col3">
       <div id="container">
         <h1>View Schedule</h1>
           <div id = 'calendar'>
           </div>
        <br />
        @Html.ActionLink("Home", "Home", "Static")
        <br />
       </div>
     </div>

問題: カレンダー自体とすべての構成が正しく読み込まれます。ただし、構成の最後の行 (イベント: "/Course/GetCalendarData") は発生しません。限目。コントローラー メソッドに配置したデバッグ ブロックがトリップすることはなく、JSON も返されません。

アクセス URL に必須の「@Url.Content...」プレフィックスを追加してみました。メソッドを別のコントローラーに格納しようとしました。別のバージョンの jQuery を使用してみました。競合を引き起こしている可能性のある余分なスクリプトをすべて削除しました。すべては灘のために。

私はこれで髪を引き裂いています。何か案は?

4

1 に答える 1

1

そのため、何時間もデバッグした後、回避策を見つけました。

ビューからGetCalendarDataメソッドへのJSONリクエストを開始する代わりに、コントローラーコードを変更して、別の静的クラスに移動しました。次に、それを使用してオブジェクトのプレーン配列を返し、ビューでその場で配列をJSONに変換します。観察:

コントローラとサポート方法:

    public static object[] GetCalendarData()
    {
    List<CourseSection> courseSecs = //list of course sections from db context
    var listOfEvents = new List<object>();

        foreach (CourseSection courseSec in courseSecs)
        {
            Course course = db.Course.Find(courseSec.CourseID);
            listOfEvents.Add(
                new
                {
                    id = courseSec.ID,
                    title = course.Name + "Section " + courseSec.Name,
                    start = ToUnixTimespan(courseSec.sectionBeginDateAndDailyStartTime),
                    end = ToUnixTimespan(courseSec.sectionEndDateAndDailyEndTime),
                    allDay = false
                });
        }

        return listOfEvents.ToArray();

    }

    public static string ToUnixTimespan(DateTime date)
    {
        TimeSpan tspan = date.ToUniversalTime().Subtract(
     new DateTime(1970, 1, 1, 0, 0, 0));

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

ビュー:@model Web.Models.Registration

    @{  
        ViewBag.Title = "ViewSchedule";
        Layout = "~/Views/Shared/_SiteLayout.cshtml";
    }

    @{
        object[] events = Web.Extensions.CourseOps.GetCalendarData();
    }

    <script>
        $(document).ready(function () {
            var allSections = @Html.Raw(Json.Encode(events));
            // page is now ready, initialize the calendar...
            $('#calendar').fullCalendar({
        defaultView: "agendaWeek",
        year: 2013,
        month: 0,
        date: 25,
        minTime: 6,
        maxTime: 18,
        aspectRatio: 1.5,
        allDaySlot: false,
        events: allSections,
        // put your options and callbacks here
    });

        });
    </script>


    <div class="wrapper col3">
      <div id="container">
        <h1>View Schedule</h1>
        <div id = 'calendar'>
        </div>
         <br />
        @Html.ActionLink("Home", "Home", "Static")
        <br />
      </div>
    </div>

元のjavascript構成(イベント: "/ Course / GetCalendarData")が起動しなかったという事実は、コントローラーにある承認属性、または認証されたCookieをチェックするかなり積極的な方法に起因する可能性がありますが、それは一種の取得です雑草に。

重要なのは、回避策が成功し、満足しているということです。

私に固執し、助けるために最善を尽くしてくれた「charlietfl」に特に感謝します。

次回まで...

于 2013-02-06T13:43:33.933 に答える