我将用一个简单的例子来说明我要做什么。
我有路线
routes.MapRoute("",
"Message",
new { controller = "Home", action = "Index", myEnum = MyEnum.Message});
routes.MapRoute("",
"",
new { controller = "Home", action = "Index" });
和动作
public ActionResult Index(/*other values*/, MyEnum? myEnum = null)
{
// do some logic
var redirectToHomeUrl = userLoggedIn && myEnum.HasValue && myEnum.Value == MyEnum.Message;
if (redirectToHomeUrl)
{
// do some logic
return RedirectToAction("Index"); <-- problem here
}
// Other logic
}
基本上,用户将发送到mysite.com/Message并注销,并在主页上显示模型对话消息。当他们根据此消息采取行动并重新登录时,页面将重新加载。我检测到它们仍然具有消息的URL,并希望将它们重定向回主URL“ mysite.com/”。
但是return
RedirectToAction("Index")
仍然保留myEnum = MyEnum.Message
。重定向后RouteData仍然存在,所以我遇到了无限循环。
我试过了
RedirectToRoute(null, new { action = "Index", controller = "Home"});
我试过了
RedirectToAction("Index", new {})
我试过了
RouteData.Values.Clear()
我试过了
RouteData.Values["myEnum"] = null;
如果您想知道的
RedirectToAction("Index", new { myEnum = null })
无法编译:)关于如何重定向到同一Action但要删除现有路由值的任何想法?
提前加油。
最佳答案
RedirectToAction("Index", new { myEnum = null })
可能不会编译,但是这样做:
RedirectToAction("Index", new { myEnum = (MyEnum?)null })
如果您想知道:)
我不明白重定向到相同动作的意义。如果只想删除一个值,请手动将其设置为
null
(或忽略它)。如果您实际上要调用其他函数(但动作相同)(似乎并非如此,但谁知道),只需直接从您的函数中返回该函数的结果即可。