0

私はウェブサイト、asp.net MVC のようなものに取り組んでいます。ホームページには、2 つの代替ビューがあります。1 つは jquery FullCalendar で、もう 1 つはインデックス ビューで、どちらもデータベースからのイベントを表示します。

現在、表示されている月をどちらでも変更できますが、それらをリンクできるようにしたいので、たとえば、カレンダーで 2013 年 4 月を表示するように変更し、[インデックス ビュー] をクリックすると、インデックスで 2013 年 4 月に移動します。デフォルトではなく、表示します。

私の「GetEventsForCalendar」メソッドは次のとおりです。

[HttpPost]
public virtual ActionResult GetEventsForCalendar(long start, long end)
{
    var startDateTime = start.ToDateTime();
    var endDateTime = end.ToDateTime();
    var listOfEvents = eventRepository.List.Where(e => e.ToDate >= startDateTime
                                                           && e.FromDate <= endDateTime).ToList()                                             .Select(eventSerialiser.SerialiseForFullCalendarJS);

    return Json(listOfEvents);
}

しかし、これらのパラメーターが指定されているコードベースのどこにも見つかりません。関数が指定されている唯一の場所は、カレンダーの部分ビュー スクリプト セクションです。

@section scripts {
@Scripts.Render(Links.Bundles.Scripts.calendar)
@Scripts.Render(Links.Bundles.Scripts.events_calendar)
<script type="text/javascript">
    $(document).ready(function() {
        SohoHouse.EventsCalendar.setup("@Url.Action(MVC.Events.GetEventsForCalendar())");
    })
</script>

}

表示されている月の詳細は Cookie に保持されていると思いますが、インデックス ビューからこれにアクセスする方法がわかりません。

他のコードが必要な場合は、お尋ねください。私はプログラミングとスタックオーバーフローに非常に慣れていないため、質問をうまく行う方法がまだわかりません:)

4

1 に答える 1

0

最終的にこれを機能させることができました。インデックスの別のビューのアイデアを放棄し、代わりにjqueryを使用してイベントのリストビューを持つテーブルを作成しました。次に、ボタンを使用して 2 つを切り替えました。参考までに、calander.js は次のようになります。

    var report = $("#report");
    var calendar = $("#calendar .fc-content");
    report.hide();

    $("#toggle-view").click(function() {
        calendar.toggle();
        report.toggle();
        $("#calendar").fullCalendar("refetchEvents");
        $("#calendar").fullCalendar("render");
        updateToggleButtonText();
    });

    function updateToggleButtonText() {
        $("#toggle-view").text(report.is(":visible") ? "View Calendar" : "View List");
    }

    function setUpCalendar() {
        $("#calendar").fullCalendar({
            events: {
                url: getEventsUrl,
                type: "POST",
                eventDataTransform: addReportRow
            },
            timeFormat: "H:mm{ - H:mm}",
            allDayDefault: false,
            eventBorderColor: "gray",
            header: {
                left: "prev,next",
                center: "title",
                right: null
            },
            weekMode: "variable",
            loading: function(isLoading) {
                if (isLoading) {
                    $("table#report > tbody:last").empty();
                }
            },
            allDaySlot: false
        });
    }

    function addReportRow(data) {
        var calendarMonth = $("#calendar").fullCalendar("getDate").getMonth();
        var startDate = new Date(data.start);
        var endDate = new Date(data.end);
        if (startDate.getMonth() > calendarMonth || endDate.getMonth() < calendarMonth) {
            return null;
        }
        var tableDetails = [
            data.title,
            $.fullCalendar.formatDate(startDate, "dd MMMM yyyy"),
            $.fullCalendar.formatDate(endDate, "dd MMMM yyyy"),
            data.published ? "Published" : "Not Published"
        ];
        var row = $("<tr></tr>");
        for (var i = 0; i < tableDetails.length; i++) {
            row.append($("<td></td>").text(tableDetails[i]));
        }
        $("table#report > tbody:last").append(row);
        return data;
    }

    function gotoDateFromCookie() {
        var calendarDate = $.cookie("calendarDate");
        if (calendarDate !== null && calendarDate !== "Invalid Date") {
            $("#calendar").fullCalendar("gotoDate", new Date(calendarDate));
            $.cookie("calendarDate", null);
        }
    }

    function storeDateAsCookie() {
        var calendarDate = $("#calendar").fullCalendar("getDate");
        $.cookie("calendarDate", calendarDate);
    }

    window.eventDropdownChanged = function() {
        location.reload();
    };
};
于 2013-11-05T17:21:26.840 に答える