Ich verwende Ajax.BeginForm, um ein Formular zu erstellen, das ein Ajax-Postback für eine bestimmte Controller-Aktion ausführt. Wenn die Aktion erfolgreich ist, sollte der Benutzer auf eine andere Seite umgeleitet werden (wenn die Aktion fehlschlägt, wird eine Statusmeldung mit angezeigt die 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]
}
Wenn das Löschen erfolgreich ist, gebe ich ein Umleitungsergebnis zurück:
[Authorize]
public ActionResult Delete(Int32 UserId)
{
UserRepository.DeleteUser(UserId);
return Redirect(Url.Action("Index", "Home"));
}
Die Home Controller-Indexansicht wird jedoch in die UpdateTargetId geladen, sodass ich eine Seite innerhalb einer Seite habe. Zwei Dinge, über die ich nachdenke:
- Entweder entwerfe ich das falsch und sollte diese Art von Aktion anders behandeln (ohne Ajax).
- Anstatt ein Redirect-Ergebnis zurückzugeben, geben Sie eine Ansicht mit Javascript zurück, die die Umleitung auf der Clientseite ausführt.
Hat jemand Kommentare zu # 1? Oder wenn # 2 eine gute Lösung ist, wie würde die "Javascript-Ansicht umleiten" aussehen?