user1378430
user1378430

Reputation:

Return action doesn't change URL

I was looking for a way to redirect with POST and the solutions I've found suggest simply using the action's name I want and fill the params. All of this within the same controller (let's call it Home)

[HttpPost]
public ActionResult Zoro(NameOfMyModel model, string stringName)
{
  //Do whatever needs to be done
  return Foo("bar",123);
}

[HttpPost]
public ActionResult Foo(string Name, int Age)
{
    //Code here that use the params
    return View();
}

So that works great except that when you look at the url, it doesn't show /Home/Foo, it shows /Home/Zoro. Can I fix this without using RedirectToAction? If I use it, I get this: Home/Foo?Name=bar&Age=123 Which I don't want.

Upvotes: 0

Views: 3019

Answers (1)

Ehsan Sajjad
Ehsan Sajjad

Reputation: 62488

Instead of calling directly calling Foo() use RedirectToAction() with this overload of it.

The way you doing calls the action on server but not actually redirects, if you want the url to change you have to redirect to the action:

return RedirectToAction("Foo", new {Name = "bar", Age = 123});

UPDATE:

As in comments mention how to keep the data temporarily ,you can use TempData[] for it:

TempData["Name"] = bar";
TempData["Age"] = 123;

return RedirectToAction("SomeAction");

and in that action you can get it from TempData:

public ActionResult SomeAction()
{

string Name = TempData["Name"] as string;
int Age - TempData["Age"] as int;

return View();

}

NOTE:

Note that RedirectToAction() only works with actions which are HttpGet, it will not work with HttpPost actions.

Upvotes: 7

Related Questions