Używam Ajax.BeginForm do stworzenia formularza, który wykona postback w Ajax do określonej akcji kontrolera, a następnie, jeśli akcja się powiedzie, użytkownik powinien zostać przekierowany na inną stronę (jeśli akcja się nie powiedzie, zostanie wyświetlony komunikat o stanie za pomocą AjaxOptions UpdateTargetId).
using (Ajax.BeginForm("Delete", null,
new { userId = Model.UserId },
new AjaxOptions { UpdateTargetId = "UserForm", LoadingElementId = "DeletingDiv" },
new { name = "DeleteForm", id = "DeleteForm" }))
{
[HTML DELETE BUTTON]
}
Jeśli usunięcie powiedzie się, zwracam wynik przekierowania:
[Authorize]
public ActionResult Delete(Int32 UserId)
{
UserRepository.DeleteUser(UserId);
return Redirect(Url.Action("Index", "Home"));
}
Ale widok indeksu kontrolera głównego jest ładowany do UpdateTargetId i dlatego kończy się strona na stronie. Dwie rzeczy, o których myślę:
- Albo projektuję to źle i powinienem obsługiwać ten typ akcji inaczej (nie używając Ajax).
- Zamiast zwracać wynik przekierowania, zwróć widok, który zawiera javascript, który wykonuje przekierowanie po stronie klienta.
Czy ktoś ma komentarze do nr 1? A jeśli punkt 2 jest dobrym rozwiązaniem, jak wyglądałby „przekierowany widok javascript”?