Я довольно новичок в MVC и просто пытаюсь достичь чего-то, что, на мой взгляд, не должно быть слишком сложным для достижения. Просто хочу знать, что является лучшим подходом для этого. У меня есть приложение Event-RSVP (вид NerdDinner), куда вы переходите, чтобы просмотреть подробную информацию о событии, а затем щелкаете ссылку AJAX, которая отправит вам RSVP для участия в мероприятии.
<%
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 Controller выглядят так:
[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. Поэтому, нажав на регистрацию, вы зарегистрируетесь и покажете вам ссылку для отмены, а нажав на кнопку «Отмена» отменит свою регистрацию и покажет вам ссылку для регистрации.
Любая помощь будет принята с благодарностью.
Спасибо.