■102101 / inTopicNo.1) |
FullCarendarのイベントソース取得について |
□投稿者/ あああ (4回)-(2023/07/02(Sun) 23:14:33)
|
分類:[ASP.NET (C#)]
【開発環境】
.NetFramework4.7.2
visualsutudio 2019 asp.net MVC
fullcarendar v6.18
【困っていること】
DBよりイベントを取得しカレンダー上に表示させたいがFullcarendarのjavascript上で下記エラーが発生する。
index.global.min.js:6 Uncaught (in promise) TypeError: Cannot use 'in' operator to search for 'display' in [
at _n (index.global.min.js:6:50229)
at Zn (index.global.min.js:6:55081)
at Yn (index.global.min.js:6:53660)
at On (index.global.min.js:6:51106)
at index.global.min.js:6:107490
at Es (index.global.min.js:6:107564)
at ha._handleAction (index.global.min.js:6:163499)
at da.runTask (index.global.min.js:6:159053)
at da.drain (index.global.min.js:6:158979)
at Ps.drained (index.global.min.js:6:112906)
【スクリプト】
<script src='https://cdn.jsdelivr.net/npm/fullcalendar@6.1.8/index.global.min.js'></script>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
document.addEventListener('DOMContentLoaded', function () {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
locale: 'ja',
buttonText: {
today: '今日',
month: '月',
week: '週',
day: '日',
list: 'リスト'
},
views: {
week: {
allDayText: '終日'
},
day: {
allDayText: '終日'
}
},
headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
},
businessHours: {
daysOfWeek: [1, 2, 3, 4, 5],
startTime: '08:00',
endTime: '17:00',
},
initialView: 'dayGridMonth',
eventSources: [
{
url: '/Home/GetEvents', // イベントデータを取得するURL
type: 'GET', // データを取得するHTTPメソッド
color: 'blue' // イベントの色
}
]
});
calendar.render();
});
【コントローラ】
[HttpGet]
public ActionResult GetEvents()
{
EventRepository er = new EventRepository();
// データベースからイベントデータを取得する処理
var eventData = er.GetEventsFromDatabase();
// オプション設定
var options = new JsonSerializerOptions
{
// 日本語を変換するためのエンコード設定
Encoder = JavaScriptEncoder.Create(UnicodeRanges.All),
// プロパティ名をキャメルケースに変換
//PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
// インデントを付ける
WriteIndented = true
};
// シリアライズ
var jsonString = JsonSerializer.Serialize(eventData, options);
return Json(jsonString,JsonRequestBehavior.AllowGet);
}
}
【model】
public class EventModel
{
public string Id { get; set; }
public string Title { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
}
public class EventRepository
{
//Mysql接続文字列
public List<EventModel> GetEventsFromDatabase()
{
List<EventModel> events = new List<EventModel>();
// データベースからデータを取得する処理を実装
// EventModelオブジェクトにマッピングして返す
//Mysql操作用
MySqlConnection sqlConn = new MySqlConnection(); //DB接続用
try
{
MySqlConnectionStringBuilder sqlBuilder = new MySqlConnectionStringBuilder();
sqlBuilder.Server = server;
sqlBuilder.UserID = userID;
sqlBuilder.Password = pass;
sqlBuilder.Database = database;
//接続文字列設定
sqlConn.ConnectionString = sqlBuilder.ConnectionString;
//DB接続
sqlConn.Open();
//DB操作
MySqlDataAdapter sqlDtA = new MySqlDataAdapter();
MySqlCommand sqlCmd = sqlConn.CreateCommand();
//SQL文作成
sqlCmd.CommandText = @"SELECT * ";
sqlCmd.CommandText += @"FROM T_yoyaku ";
//SQL文実行
MySqlDataReader sqlReader = sqlCmd.ExecuteReader();
//testTable内にデータが入っているか判定
if (sqlReader.HasRows)
{
//レコード分ループする
while (sqlReader.Read())
{
EventModel eventModel = new EventModel
{
Id = sqlReader["id"].ToString(),
Title = sqlReader["title"].ToString(),
Start = Convert.ToDateTime(sqlReader["start"]),
End = Convert.ToDateTime(sqlReader["end"])
};
events.Add(eventModel);
}
}
sqlReader.Close();
sqlCmd.Dispose();
return events;
}
catch
{
return events;
}
finally
{
// 接続解除
sqlConn.Close();
sqlConn.Dispose();
}
}
}
【補足】
コントローラで返しているJSONデータの中身は
[
{
"Id": "1",
"Title": "イベント",
"Start": "2023-07-02T00:00:00",
"End": "2023-07-03T00:00:00"
},
{
"Id": "2",
"Title": "イベント",
"Start": "2023-07-04T00:00:00",
"End": "2023-07-05T00:00:00"
}
]
となっています。
色々調べても修正方法が分からずどなたか助けていただけませんか。
|
|