7

I have a "Thingy" controller for that looks like:

[HttpPost]
public ActionResult DeleteConfirmed(long? id) {
    // <Validate ID, delete associated records>
    return RedirectToAction("Index", "Thingy");
}

However, RedirectToAction keeps having its route values populated with the id from the parameters, whereas I want it to leave id as null so it redirects to www.mywebsite.com/Thingy instead of www.mywebsite.com/Thingy/1

In fact, I can visit www.mywebsite.com/Thingy directly and it works as expected.

I have tried:

RedirectToAction("Index", "Thingy")
RedirectToAction("Index", "Thingy", new { })
RedirectToAction("Index", "Thingy", new { id = (long?)null })

The last is particularly amusing because it redirects to www.mywebsite.com/Thingy?id=1 where as the others redirect to www.mywebsite.com/Thingy/1.

Erik Philips
  • 53,428
  • 11
  • 128
  • 150
Kaganar
  • 6,540
  • 2
  • 26
  • 59
  • 1
    Try adding this before the redirect in your first example: `RouteData.Values.Remove("id");`. I have a feeling the route values you specify are being merged with the original route values. – Erik Philips Oct 22 '14 at 21:47
  • Brilliant, works. Make it an answer and I'll accept since it effectively fixes my issue. – Kaganar Oct 22 '14 at 21:50
  • 1
    I'm happy it works, I was in the middle of testing it when you commented. – Erik Philips Oct 22 '14 at 21:52

1 Answers1

16

Add the following before your RedirectToAction() in your first example:

RouteData.Values.Remove("id");

I have a feeling the route values you specify are being merged with the original route values.

Erik Philips
  • 53,428
  • 11
  • 128
  • 150