我将 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>
然后将其显示为更大视图的一部分:
操作链接将要预订的会话的 guid 传递给我的控制器中的以下函数,该函数从 cookie 中检索 memberId 并使用实体框架为该成员和会话创建预订。
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,失败时,我想用“会话已满”之类的失败条件替换它。
或者我可以只更新我的部分视图,因为那会做同样的事情。
我在这里错过了一些简单的东西吗?或者,我是在吠叫完全错误的树吗?