繁体   English   中英

ASP.NET MVC RedirectToAction传递错误的参数值?

[英]ASP.NET MVC RedirectToAction Passing Wrong Parameter Value?

我正在使用ASP.NET MVC 1.0。 我有一个ActionResult,它从下拉列表中接收一个带有值的表单帖子。 然后它重定向到ActionResult,将值作为参数传递。 这是我的2个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方法上的promoId值。 即使II完全关闭页面并重新加载它,几乎就像它被缓存在某个地方一样。 我知道这很简单,但我以前从未碰过这个。

编辑:

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

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

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

然而,我仍然使用参数得到相同的结果。

您是否尝试过使用默认路由设置:{controller} / {action} / {id}? 那些是你唯一的路线吗? 路由按顺序进行评估,因此如果匹配,则先前路由可以覆盖下面的路径。 Phil Haack在他的博客haacked.com上发布了一个路由调试器

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

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

你试过这个吗?

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,默认的生活方式类型是单身,这导致了“缓存”行为。 请参阅: ASP.NET MVC - 未从表单收集控制器参数?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM