7

FullCalendar在我的 asp.net mvc 应用程序中使用。它不加载事件。我通过 ajax 调用获取事件列表。下面是我的代码。它有什么问题。?

<div class="row">
    <div class="col-lg-12">
        <section class="panel">
            <div class="panel-body">
                <div id="calendar"></div>
            </div>
        </section>
    </div>
</div>
<script type="text/javascript">
    jQuery.extend({
        getValues: function (url) {
            var result = null;
            $.ajax({
                url: url,
                type: 'get',
                dataType: 'json',
                async: false,
                success: function (data) {
                    result = data;
                },
                error: function (err) {
                    alert(JSON.stringify(err));
                }
            });
            return result;
        }
    });
    var jsonEvents = $.getValues('@Url.Action("GetEvents", "Booking")');
    alert(jsonEvents);

    //var jsonEvents = [{ title: "Dhaval, (4,6), 6", start: "05/21/2016 1:05:00 PM" },
    //    { title: "Mohit, (2), 4", start: "05/21/2016 1:05:00 PM" }]

    $('#calendar').fullCalendar({
        header:
        {
            left: 'prev,next today',
            center: 'title',
            right: 'agendaWeek,agendaDay'
        },
        allDay: true,
        defaultView: 'agendaWeek',
        events: jsonEvents//'@Url.Action("GetEvents", "Booking")'
    });
</script>

**评论中的js只是示例格式。**GetEvents/Controller如下所示,

public Json GetEvents()
{
    string query = "query to get events";
    // columns in result table are: id, title, date
        try
        {
            SqlConnection connection = new SqlConnection("connectionString");
            connection.Open();
            SqlCommand command = new SqlCommand(query, connection);
            SqlDataReader events = command.ExecuteReader();
            DataTable dt = new DataTable();
            dt.Load(events);
            string result = DataTableToJSONWithStringBuilder(dt);
            connection.Close();
            return Json(result, JsonRequestBehavior.AllowGet);
        }
        catch (Exception ex) { }
    }
public string DataTableToJSONWithStringBuilder(DataTable table)
    {
        var JSONString = new StringBuilder();
        if (table.Rows.Count > 0)
        {
            JSONString.Append("[");
            for (int i = 0; i < table.Rows.Count; i++)
            {
                JSONString.Append("{");
                for (int j = 0; j < table.Columns.Count; j++)
                {
                    if (j < table.Columns.Count - 1)
                    {
                        JSONString.Append(table.Columns[j].ColumnName.ToString() + ":" + "\"" + table.Rows[i][j].ToString() + "\",");
                    }
                    else if (j == table.Columns.Count - 1)
                    {
                        JSONString.Append(table.Columns[j].ColumnName.ToString() + ":" + "\"" + table.Rows[i][j].ToString() + "\"");
                    }
                }
                if (i == table.Rows.Count - 1)
                {
                    JSONString.Append("}");
                }
                else
                {
                    JSONString.Append("},");
                }
            }
            JSONString.Append("]");
        }
        return JSONString.ToString();
    }

这是我想要的格式。 [{title:"John, (2,1), 6",start:"13/05/2016 12:00:00 AM"},{title:"Olivia, (11,4), 6",start: "2016 年 11 月 5 日上午 12:00:00"}]

检查元素时出现以下错误。:
加载资源失败: 服务器响应状态为 400 (Bad Request) : http: localho../ABC/[%7Btitle:%22John,%20(4,6),%206%22,start:% 2205/21/2016%201:05:00%20PM%22,结束:%2205/21/2016%201:30:00%20PM%22%7D,%7Btitle:%22Olivia,%20(2),% 204%22,开始:%2205/21/2016%201:05:00%20PM%22,结束:%2205/21/2016%201:30:00%20PM%22%7D]?start=2016-05 -15&结束=2016-05-22&_=1463885539445

在这里我发表了评论var jsonEvents = [...]。当我使用预定义的事件时,日历显示它们完美。但是当我调用服务器时,出现错误。 FULLCALENDAR 是否仅显示存储在服务器上的文件中的事件。因为文档仅显示包含 JSON 数据的文件的 URL。

帮我。谢谢。

4

3 回答 3

5

使您的日历不显示的唯一真正问题是:

defaultView: 'agendaweek',

它一定要是

 defaultView: 'agendaWeek',

是的......大写字母搞砸了你的洞。

你不需要所有其他的

$("#calendar").fullCalendar(...)

在你主要的旁边。只保留这个(大写 W)

$('#calendar').fullCalendar(
            {
                header:
                {
                    left: 'prev,next today',
                    center: 'title',
                    right: 'month,agendaWeek,agendaDay'
                },
                defaultView: 'agendaWeek',
                selectable: false,
                selectHelper: false,
                events: events
            });

编辑

那是因为您的日期格式不正确。默认值为 MM/dd/YYYY。您正在尝试将日期设置为第 13 个月。您拥有多个日历的原因是您设置了多次。只做一次。您可以在此处使用您的 json看到一个工作示例(我更正了日期)。只需将所有 javascript 和 HTML 清理为 jsFiddle 示例中的样子,然后开始添加您自己的内容。

于 2016-05-20T11:22:41.647 回答
2

试试下面的代码:

$(document).ready(function () {

    var sourceFullView = { url: '/Booking/GetEvents/' };
    var CalLoading = true;

    $('#calendar').fullCalendar({
        header: {
            left: '',
            right: '',
            center: 'prev,title,next',
        },
        defaultView: 'month',
        editable: true,
        allDaySlot: false,
        selectable: true,
        slotMinutes: 15,
        droppable: true,
        events: '/Booking/GetEvents/'
    });
});

我不确定您从那里的查询中得到的 JSON 响应是什么。因此,如果您可以尝试使用 Entity Framework Linq 查询来获取记录,那么下面是我的示例代码,可能会对您有所帮助。

public JsonResult GetEvents()
{
    try
    {
        var eventsList = from ev in db.YourTableName
        select new
        {
            Id = ev.Id,
            Title = ev.Title,
            Date = ev.Date
        };
        var rows = eventsList.ToArray();
        return Json(rows, JsonRequestBehavior.AllowGet);
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
于 2016-05-20T17:47:30.937 回答
2

尝试

events: { url: '@Url.Action("GetEvents", "Booking")', type:'GET', ..}

代替

events :'@Url.Action("GetEvents", "Booking")'

单击此处获取事件对象属性的完整参考。

于 2016-05-27T19:09:55.270 回答