我对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