Use RedirectToAction without passing query string parameters/route values
Asked Answered
E

1

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.

Evildoer answered 22/10, 2014 at 21:43 Comment(3)
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.Euphrates
Brilliant, works. Make it an answer and I'll accept since it effectively fixes my issue.Evildoer
I'm happy it works, I was in the middle of testing it when you commented.Euphrates
E
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.

Euphrates answered 22/10, 2014 at 21:51 Comment(1)
Wow. It was difficult to find. +1Virgilvirgilia

© 2022 - 2024 — McMap. All rights reserved.