私は Entity Framework で MVC4 を使用しています。多くの人と同じように、MVC を初めて使用し、デザイン パターンを理解しようとしています。
認証されたメンバーがセッションに予約できるようにするアクションリンクが続くセッションのリストを表示する部分的なビューがあります。
注: わかりやすくするために、コードの大部分を省略しています。メンバーがセッションに予約されている場合、アクション リンクの代わりに「予約済み」と表示されます。
@using OnlineBookings.Website.Models
@{ DateTime currentDate = DateTime.MinValue.Date; }
<form method="post" action="~/Controllers/BookSessionController.cs">
@foreach (SessionsWithBookingInformation s in Model)
{
<p>@s.StartTime.ToString("t")
@s.Description
@Html.ActionLink(
"Book",
"BookSession",
new { sessionId = s.SessionId }
)
</p>
}
</form>
これは、より大きなビューの一部として表示されます。
actionlinks は、予約するセッションの GUID をコントローラーの次の関数に渡します。この関数は、Cookie から memberId を取得し、Entity Framework を使用してそのメンバーとセッションの予約を作成します。
public ActionResult BookSession(Guid sessionId)
{
using (var db = new OnlineBookingsEntities())
{
// see if the member id is stored in a cookie
if (Request.Cookies["memberId"] != null)
{
var memberId = new Guid(Request.Cookies["memberId"].Value);
db.Bookings.Add(new Booking
{
BookingId = Guid.NewGuid(),
MemberId = memberId,
SessionId = sessionId,
BookingTime = DateTime.Now
});
db.SaveChanges();
}
}
// this refreshes the entire page
/// is there a better way to just replace the actionlink they clicked on?
return RedirectToAction("Index", "Home");
}
これらはすべてうまく機能しており、予約は効果的に記録されています。
しかし、私が理解しようとしているのは、BookSession
関数からの戻り値が actionlink テキストを更新できるかどうかです。
理想的には、成功時には部分ビューの ActionLink を「予約済み」という単語に置き換え、失敗時には「セッションがいっぱい」などの失敗状態に置き換えたいと考えています。
または、部分ビューを更新することもできます。これは、同じことを行うためです。
ここで簡単なものが欠けていますか?または、私は完全に間違ったツリーを吠えていますか?