我正在使用MVC4與實體框架,並像許多人,我是新來的MVC,並試圖讓我的頭繞着設計模式。你應該返回什麼ActionResult來更新ActionLink文本?
我有一個局部視圖,它顯示會話列表,後面跟着允許經過身份驗證的成員登錄到會話的actionlinks。
注意:爲了清楚起見,我已經截掉了大部分代碼,如果成員預訂了會話,它將顯示「預訂」而不是操作鏈接。
@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來通過在我的控制器,以檢索MEMBERID預訂到以下函數從cookie中使用實體框架爲該成員和會話創建預訂。
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,如果失敗,我想用「會話已滿」等失敗條件替換它。
或者我可以只更新我的部分視圖,因爲那樣做會做同樣的事情。
我在這裏錯過了一些簡單的東西嗎?或者,我吠叫完全錯誤的樹?
感謝羅恩,我同意這真的是一個「從哪裏來?」題。我會重構,並試試這個:) –