Asp.net mvc ASP.NET MVC重定向到传递错误参数值的操作?

Asp.net mvc ASP.NET MVC重定向到传递错误参数值的操作?,asp.net-mvc,Asp.net Mvc,我正在使用ASP.NETMVC1.0。我有一个ActionResult,它从下拉列表中接收一个带有值的表单帖子。然后它重定向到ActionResult,将值作为参数传递。以下是我的两种ActionResult方法: [AcceptVerbs(HttpVerbs.Post)] public ActionResult FindPromo() { var promoId = Convert.ToInt32(Request.Form["ddlPromotion"]); return Re

我正在使用ASP.NETMVC1.0。我有一个ActionResult,它从下拉列表中接收一个带有值的表单帖子。然后它重定向到ActionResult,将值作为参数传递。以下是我的两种ActionResult方法:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult FindPromo()
{
    var promoId = Convert.ToInt32(Request.Form["ddlPromotion"]);
    return RedirectToAction("GetPromo", new { id= promoId });
}

public ActionResult GetPromo(int id)
{

    if (promoId > 0)
    {
        var model = GetModel(id);

        if (model.Promo != null)
        {
            return View("Promo", GetModel(id));
        }
    }

    return RedirectToAction("NotFound");
}
当我调试这个时,下拉列表中的值会正确地从我的表单中提取出来,但是在重定向时,一个不同于前一个请求的值会作为GetPromo方法上的promid值。即使我完全关闭页面并重新加载它,也会发生这种情况,就像它被缓存在某个地方一样。我知道这很简单,但我以前从未遇到过

编辑:

我将参数名从promoId更改为id,并更新了路由表。我已经更新了上面的代码示例,下面是我的路线:

    routes.MapRoute("GetPromo", "{controller}/GetPromo/{id}",
        new { controller = "Promo", action = "GetPromo" });

    routes.MapRoute("FindPromo", "{controller}/FindPromo/{id}",
        new { controller = "Promo", action = "FindPromo" });

但是,我仍然得到与参数相同的结果。

我想知道这是否与您的路由设置有关。尝试将
promoId
重命名为
id
并更新路由值。如果这不起作用,你能用你的路由更新你的帖子吗。

你是否尝试过使用默认路由设置:{controller}/{action}/{id}? 还有,这些是你唯一的路线吗?这些路由按顺序进行评估,以便先前的路由在匹配时可以覆盖下面的路由。 Phil Haack在他的博客上发布了一个路由调试器

您还可以使用:RouteTable.Routes.GetVirtualPath(),传递ViewContext.RequestContext和RouteValueDictionary并查看结果Url。

您尝试过吗

return RedirectToAction("GetPromo", new { id = promoId.ToString() });
我认为我们遇到了一个类似的问题,解决了这个问题

如果没有,您可以执行以下操作:

var dict = new RouteValueDictionary();
dict.Add("id", promoId);

return RedirectToAction("GetPromo", dict);

作为建议,您不应该使用Convert.ToInt32,而应该使用int.Parse或int.TryParse。

检查您的IOC容器是否未将控制器注册为单例。我使用的是Windsor,默认的生活方式类型是singleton,这导致了“缓存”行为。请参阅:

您是否找到了导致此问题的真正原因?