2014-10-22 2 views
3

У меня есть «Thingy» контроллер для этого выглядит следующим образом:Использование RedirectToAction без передачи параметров строки запроса/маршрута значения

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

Однако RedirectToAction сохраняет имеющие значения ее маршрут заполняется с идентификатором из параметров, в то время как I хотите, чтобы он оставил id равным нулю, поэтому он перенаправляет на www.mywebsite.com/Thingy вместо www.mywebsite.com/Thingy/1

Фактически, я могу напрямую посетить www.mywebsite.com/Thingy, и он работает так, как ожидалось.

Я пробовал:

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

Последнее особенно забавным, потому что он перенаправляет на www.mywebsite.com/Thingy?id=1 где, как остальные перенаправлять на www.mywebsite.com/Thingy/1.

+1

Попробуйте добавить это перед перенаправлением в первом примере: 'RouteData.Values.Remove (« id »);'. Я чувствую, что указанные вами значения маршрута сливаются с исходными значениями маршрута. –

+0

Блестящий, работает. Сделайте это ответом, и я соглашусь с тем, что он эффективно исправляет мою проблему. – Kaganar

+0

Я рад, что это работает, я был в середине тестирования, когда вы прокомментировали. –

ответ

8

Добавьте следующее, прежде чем ваш RedirectToAction() в первом примере:

RouteData.Values.Remove("id"); 

У меня есть ощущение ценности маршрута вы задающая были слиты с исходными значениями маршрута.

+0

Ничего себе. Трудно было найти. +1 –

Смежные вопросы