我在asp.net mvc应用程序中使用FullCalendar
。它不加载事件。我通过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",开始时间:"13/05/2016 12:00:00 AM"},{title:"Olivia,(11,4),6",开始时间"11/05/2016 12:00 AM"}]
检查元素时出现以下错误。:
加载资源失败:服务器响应状态为400(错误请求):http:localho/ABC/[%7标题:%22John,%20(4,6),%206%22,开始时间:%2205/21/2016:05:05:00%20PM%22,结束时间:%22005/21/2016:30:00%20PM%22%7D,%7标题:%22Lovia,%20,%204%22,起始时间:%205/21/2016:201:05:00/20PM%22,终止时间:%2025/21/2016:20PM%220%7D]?开始=2016-05-15&end=2016-05-22&_=1463885539445
我在这里评论了var jsonEvents = [...]
。当我使用预定义的事件时,日历会完美地显示它们。但当我调用服务器时,出现了错误。FULLCALENDAR只显示存储在服务器上的文件中的事件。因为文档只显示了包含JSON数据的文件的URL
帮帮我,谢谢。
使日历无法显示的唯一真正问题是:
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的工作示例(我更正了日期)。只需像jsFiddle示例中那样清理所有的javascript和HTML,然后开始添加自己的东西。
尝试以下代码:
$(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响应中得到了什么。因此,如果您可以尝试使用EntityFrameworkLinq查询来获取记录,下面是我的示例代码,可能会对您有所帮助。
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;
}
}
尝试
events: { url: '@Url.Action("GetEvents", "Booking")', type:'GET', ..}
而不是
events :'@Url.Action("GetEvents", "Booking")'
单击此处获取事件对象属性的完整参考。