私のアプリケーションは、ユーザーが予定の予定を個人の予定表に追加できるようにするためのものです。パーソナルカレンダーは、単一のテーブルとして実装され、すべてのユーザーで共有され、string UserID
の値をint EventID
にリンクし、プライマリキーに別のint UserCalendarID
を割り当てます。ASP.NET MVC - テーブルが更新されない
ただし、アクションが呼び出されるとテーブルは更新されません。アクションは下に掲載されています。参考のために
[HttpPost]
public IActionResult AddToCalendar(int ID)
{
var events = context.Events.ToList();
Event _e = events.FirstOrDefault(x => x.EventID == ID);
var calendars = context.Calendars.ToList();
UserCalendar c = new UserCalendar
{
UserID = userManager.GetUserAsync(HttpContext.User).Result.UserName,
EventID = _e.EventID
};
calendars.Add(c);
context.SaveChanges();
return View("Index");
}
、これはイベントテーブルにイベントを追加する(作業)コードです:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> NewEvent(Models.NewEventViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var newEvent = new Event {
Artist = await userManager.GetUserAsync(HttpContext.User),
EventName = model.EventName,
Time = model.Time,
Venue = model.Venue,
GenreID = model.GenreID
};
var events = context.Events;
events.Add(newEvent);
context.SaveChanges();
ViewBag.Notification = "Your event has been added.";
ViewBag.Color = "Green";
}
else {
ViewBag.Notification = "Something went wrong — Event not added.";
ViewBag.Color = "Red";
}
return View("Index");
}
私はAddToCalendarのためのViewModelを使用していない理由特にそれについての見解はないということです。むしろ、それは次のように定義されてEventDetailsページ上のフォームにボタンによってトリガされます:
@model Event
@{
ViewData["Title"] = "Event Details";
Event e = ViewBag.Event;
}
<h2>@ViewData["Title"]</h2>
<p><b>Event Name: </b>@e.EventName</p>
<p><b>Artist: </b>@e.Artist.ClientName</p>
<p><b>Date and Time: </b>@e.Time</p>
<p><b>Genre: </b>@e.Genre.GenreName</p>
<p><b>Venue: </b>@e.Venue</p>
@if (ViewBag.isYours)
{
<a asp-action="DeleteEvent" asp-controller="Home" class="btn btn-danger" [email protected]>DELETE</a>
<a asp-action="EditEvent" asp-controller="Home" class="btn btn-success" [email protected]>EDIT</a>
}
<form asp-action="AddToCalendar" asp-controller="Home" [email protected] asp-route-returnurl="@ViewData["ReturnUrl"]">
<input type="submit" value="Add To Your Calendar" class="btn btn-default" />
</form>
私はすでにc
がcalendars
に追加されていることを確認しています。 AddToCalendarイベントによってテーブルが更新されないのはなぜですか?
データベースの実際のコンテキストではなく、メモリ内のリストに "c"を追加しています。 context.Calendars.Add(c)を使用してみてください。その後、context.SaveChanges()の呼び出し後に更新する必要があります。 –
申し訳ありませんが、私はあなたがその下の「イベント」をどのように使用していたのか迷っていました。同じ方法で使いたい場合は、次の行からToList()を削除するだけです:var calendars = context.Calendars.ToList()。これは、ToList()から返されるリストの代わりにデータベースコンテキストオブジェクトを追跡する必要があります –
2番目のオプションが機能しました。私はそれを受け入れることができるように答えとして投稿することを検討しますか? – Passage