Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ajax.BeginForm that can redirect to a new page

Tags:

I have an @Ajax.BeginForm for my model which has a boolean value (@Html.CheckBoxFor). If this is checked, I want my HttpPost action to redirect to a new page. Otherwise I want it to just continue being an @Ajax.BeginForm and update part of the page.

Here is my HttpPost action (Note: Checkout is the boolean value in my model)

Controller:

    [HttpPost]     public ActionResult UpdateModel(BasketModel model)     {         if (model.Checkout)         {             // I want it to redirect to a new page             return RedirectToAction("Checkout");         }         else         {             return PartialView("_Updated");         }     } 
like image 229
CallumVass Avatar asked Feb 22 '12 08:02

CallumVass


People also ask

What is the difference between Ajax BeginForm and HTML BeginForm?

BeginForm() will create a form on the page that submits its values to the server as a synchronous HTTP request, refreshing the entire page in the process. Ajax. BeginForm() creates a form that submits its values using an asynchronous ajax request.

What is the difference between redirect and RedirectToAction in MVC?

Between RedirectToAction() and Redirect() methods, best practice is to use RedirectToAction() for anything dealing with your application actions/controllers. If you use Redirect() and provide the URL, you'll need to modify those URLs manually when you change the route table.

What is Ajax BeginForm in MVC?

Ajax. BeginForm is the extension method of the ASP.NET MVC Ajax helper class, which is used to submit form data to the server without whole page postback. To work Ajax. BeginForm functionality properly, we need to add the reference of jquery.

What is redirect to route in MVC?

RedirectToRoute(String, Object)Redirects to the specified route using the route name and route values.


1 Answers

You could use JSON and perform the redirect on the client:

[HttpPost] public ActionResult UpdateModel(BasketModel model) {     if (model.Checkout)     {         // return to the client the url to redirect to         return Json(new { url = Url.Action("Checkout") });     }     else     {         return PartialView("_Updated");     } } 

and then:

@using (Ajax.BeginForm("UpdateModel", "MyController", new AjaxOptions { OnSuccess = "onSuccess", UpdateTargetId = "foo" })) {     ... } 

and finally:

var onSuccess = function(result) {     if (result.url) {         // if the server returned a JSON object containing an url          // property we redirect the browser to that url         window.location.href = result.url;     } } 
like image 105
Darin Dimitrov Avatar answered Oct 05 '22 07:10

Darin Dimitrov