emre nevayeshirazi
emre nevayeshirazi

Reputation: 19261

URL stays same when returning different view of same controller

I am trying to return a different view from my controller. However, although the correct view is displayed the URL stays same.

This is my form in /Company/Create view.

@using (Html.BeginForm("Create", "Company", FormMethod.Post)) 
{ 
 // Form here
}

So basically, the form and model is submitted to /Company/Create action. If the submitted model is valid, then I process the data and redirect to /Company/Index view with

return View("Index");

As I said, correct view is displayed however, URL (address bar) is still http://.../Company/Create

I tried RedirectToAction("Index"); It does not work also. And I do not think its a good MVC practice. I have a single layout and Company views are rendered with RenderBody()

Any ideas ?

Thanks.

Edit :

This is my action method,

[HttpPost]
public ActionResult Create(CompanyCreate model)
{
    /* Fill model with countries again */
    model.FillCountries();

    if (ModelState.IsValid)
    {
        /* Save it to database */
        unitOfWork.CompanyRepository.InsertCompany(model.Company);
        unitOfWork.Save();
        RedirectToAction("Index");
        return View();
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}

Upvotes: 0

Views: 2840

Answers (1)

nemesv
nemesv

Reputation: 139788

You need to redirect to another action if you want the url changed.

However RedirectToAction doesn't redirect instantly but returns aRedirectToRouteResult object which is an ActionResult object.

So you just need to return the result of RedirectToAction from your action:

[HttpPost]
public ActionResult Create(CompanyCreate model)
{
    /* Fill model with countries again */
    model.FillCountries();

    if (ModelState.IsValid)
    {
        /* Save it to database */
        unitOfWork.CompanyRepository.InsertCompany(model.Company);
        unitOfWork.Save();
        return RedirectToAction("Index");
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}

Upvotes: 3

Related Questions