Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get an ASP.NET MVC Ajax response to redirect to new page instead of inserting view into UpdateTargetId?

I am using the Ajax.BeginForm to create a form the will do an ajax postback to a certain controller action and then if the action is successful, the user should get redirected to another page (if the action fails then a status message gets displayed using the 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]    } 

If the delete is successful I am returning a Redirect result:

[Authorize] public ActionResult Delete(Int32 UserId) {     UserRepository.DeleteUser(UserId);     return Redirect(Url.Action("Index", "Home")); } 

But the Home Controller Index view is getting loaded into the UpdateTargetId and therefore I end up with a page within a page. Two things I am thinking about:

  1. Either I am architecting this wrong and should handle this type of action differently (not using ajax).
  2. Instead of returning a Redirect result, return a view which has javascript in it that does the redirect on the client side.

Does anyone have comments on #1? Or if #2 is a good solution, what would the "redirect javascript view" look like?

like image 634
Jeff Widmer Avatar asked Oct 08 '09 15:10

Jeff Widmer


People also ask

How redirect to another page in AJAX call in MVC?

You can get a non-js-based redirection from an ajax call by putting in one of those meta refresh tags. This here seems to be working: return Content("<meta http-equiv=\"refresh\" content=\"0;URL='" + @Url. Action("Index", "Home") + "'\" />");

How do I move to another page in AJAX?

$. ajax({ type: 'POST', url: 'AJAX URL', data: "YOUR DATA" // don't forget to pass your csrf_token when using post success: function(data){ $("what_ever_you_want_to_replace"). html(data. view); }, error: function(xhr, type, exception) { // if ajax fails display error alert alert("ajax error response type "+type); } });


1 Answers

You can use JavascriptResult to achieve this.

To redirect:

return JavaScript("window.location = 'http://www.google.co.uk'"); 

To reload the current page:

return JavaScript("location.reload(true)"); 

Seems the simplest option.

like image 56
Ben Foster Avatar answered Sep 28 '22 02:09

Ben Foster