我对MVC相当陌生,只是想实现一些我认为不应该太复杂的东西。我只是想知道最好的方法是什么。我有一个事件-RSVP应用程序(NerdDinner类型),您可以查看事件的详细信息,然后单击AJAX链接,该链接将回复您的事件。
<%
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链接后执行我的问题中的第一个代码块。点击register会注册你并显示你取消链接点击cancel会取消你的注册并显示你注册链接
任何帮助都将非常感激。谢谢。
您可以使用jQuery显示和隐藏这些链接。
我从不使用Ajax。ActionLink,我在没有帮助的情况下做AJAX但我认为它应该是这样的:
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", OnSuccess = "ShowHideLinks" }, new { id = "cancel-link", @style = "display:none"})
Ajax.ActionLink("RSVP for this event", "Register", "RSVP", new { id=Model.EventID }, new AjaxOptions { UpdateTargetId="QuickRegister", OnSuccess = "ShowHideLinks" }, new { id = "register-link"})
和一些javascript/jQuery来初始化当前显示链接:
function ShowHideLinks() {
$('#register-link').toggle();
$('#cancel-link').toggle();
}
<%: if(Model.HasRSVP(Context.User.Identity.Name)) { %>
ShowHideLinks();
<%: } %>
希望这有帮助!
可以使用jQuery设置链接。我看到你正在从两个动作方法中传递内容。您可以在jQuery中使用$.post()来执行这些操作,并在成功事件处理程序中比较返回的内容(您需要发送一些比当前字符串更容易比较的内容)并适当设置链接。