Asp.net mvc ASP.NET MVC重定向到传递错误参数值的操作?
我正在使用ASP.NETMVC1.0。我有一个ActionResult,它从下拉列表中接收一个带有值的表单帖子。然后它重定向到ActionResult,将值作为参数传递。以下是我的两种ActionResult方法: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
[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,这导致了“缓存”行为。请参阅:您是否找到了导致此问题的真正原因?