我對MVC相當陌生,只是試圖實現我認爲不應該太複雜的事情。只是想知道最好的方法是什麼。我有一個Event-RSVP應用程序(NerdDinner類),您可以在其中查看事件的詳細信息,然後單擊一個AJAX鏈接,該鏈接將回復您的事件。控制器AJAX方法返回AJAX ActionLink
<%
if (Model.HasRSVP(Context.User.Identity.Name))
{
%>
<p>
You are registered for this event!
<%:
Ajax.ActionLink("Click here if you can't make it!", "CancelRegistration", "RSVP", new { id = Model.RSVPs.FirstOrDefault(r => r.AttendeeName.ToLower() == User.Identity.Name.ToLower()).RSVPID }, new AjaxOptions { UpdateTargetId = "QuickRegister"})
%>
</p>
<%
}
else
{
%>
<p>
<%:
Ajax.ActionLink("RSVP for this event", "Register", "RSVP", new { id=Model.EventID }, new AjaxOptions { UpdateTargetId="QuickRegister" }) %>
</p>
<%
}
%>
現在對應於這兩個鏈接,我在RSVP控制器中的功能看起來就像這些。
[Authorize, HttpPost]
public ActionResult Register(int id)
{
Event event = eventRepository.GetEvent(id);
if (event == null)
return Content("Event not found");
if (!event.IsUserRegistered(User.Identity.Name))
{
RSVP rsvp = new RSVP();
rsvp.AttendeeName = User.Identity.Name;
event.RSVPs.Add(rsvp);
eventRepository.Save();
}
return Content("Thanks, you are registered.");
}
[Authorize, HttpPost]
public ActionResult CancelRegistration(int id)
{
RSVP rsvp = eventRepository.GetRSVP(id);
if (rsvp == null)
return Content("RSVP not found");
if (rsvp.Event.IsUserRegistered(User.Identity.Name))
{
eventRepository.DeleteRSVP(rsvp);
eventRepository.Save();
}
return Content("Sorry, we won't be seeing you there!");
}
這兩個這些似乎沒有任何問題的工作。現在,我想通過執行以下任一操作使它變得更有趣:
1)從控制器返回一個AJAX鏈接,這樣當您註冊時,您將看到取消註冊鏈接,而無需刷新頁面。
2)以某種方式使控制器方法執行完成後刷新視圖呈現,以便在單擊任何AJAX鏈接後執行我的問題中的第一個代碼塊。因此,點擊註冊將註冊您並顯示您取消鏈接,點擊取消將取消您的註冊並顯示註冊鏈接。
任何幫助將不勝感激。 謝謝。
在下面的評論混淆後,這裏有一些更多的解釋。我希望能夠做的是1)你沒有訂閱(文本)&點擊rsvp(鏈接)2)你訂閱(文本)和點擊取消(鏈接)顯示交替基於用戶的當前RSVP狀態。客戶沒有這樣做的具體要求,這是我學習ASP .Net MVC的一部分,我只是想了解我有什麼選擇。從您的評論下面,它看起來像jQuery $ .post()是要走的路。所以我現在會進一步調查,看看我是否有任何問題。 – 2011-04-06 10:01:00