asp.net-mvc – 是否可以使用RedirectToAction清除路由值?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 是否可以使用RedirectToAction清除路由值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_403_1@我想重定向到同一控制器中的操作,但丢失路由值(特别是id值).事实证明这非常困难.我有像这样配置的路由:
context.MapRoute(
    "Monitoring_controllerIdSpecified","Monitoring/{controller}/{id}/{action}",new { action = "Status" }
);

context.MapRoute(
    "Monitoring_default","Monitoring/{controller}/{action}",new { controller = "Events",action = "Index" }
);

…和EventsController中的一个动作方法是这样的:

public ActionResult Status(int id) {
    if (id > 1000) {
        TempData["ErrorMessage"] = "ID too high.";
        return RedirectToAction("Index",new { id = (int?)null });
    }

    // (code to display status)
}

如果我然后访问/ Monitoring / Events / 1001之类的东西,确实调用了RedirectToAction,但是我被重定向到/ Monitoring?id = 1001而不仅仅是/ Monitoring.它似乎匹配第一个路径,Monitoring_controllerIdSpecified,即使该路由具有id作为强制路由参数,我告诉它将id设置为null,并奇怪地将id转换为查询字符串键.换句话说,它没有正确清除/删除id路由值.在传递给RedirectToAction的routeValues对象中将id设置为空字符串只会产生与将其设置为null相同的效果.

为什么这样做,我怎么能说服它不匹配第一条路线,因为id已经从路线值中完全删除了?

解决方法

感谢@Slicksim我发现答案是从RouteData.Values中删除密钥而不是将其设置为null:
public ActionResult Status(int id) {
    if (id > 1000) {
        TempData["ErrorMessage"] = "ID too high.";
        RouteData.Values.Remove("id");
        return RedirectToAction("Index");
    }

    // (code to display status)
}
原文链接:https://www.f2er.com/aspnet/248935.html

猜你在找的asp.Net相关文章