2009-04-09 12 views
4

J'utilise ASP.NET MVC 1.0. J'ai un ActionResult qui reçoit un message de formulaire avec une valeur dans une liste déroulante. Il redirige ensuite vers un objet ActionResult en transmettant la valeur en tant que paramètre. Voici mes 2 méthodes de ActionResult:ASP.NET MVC RedirectToAction Transmettre une valeur de paramètre incorrecte?

[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"); 
} 

Quand je débugger, la valeur de la liste déroulante est tiré correctement de ma forme, mais sur la redirection, une valeur différente d'une demande précédente vient à travers comme promoId valeur sur la méthode GetPromo. Cela arrive même si je ferme complètement la page et que je la recharge, presque comme si elle était cachée quelque part. Je sais que c'est quelque chose de simple, mais je ne l'ai jamais rencontré auparavant.

EDIT:

J'ai changé les noms des paramètres de promoId à id, et également mis à jour ma table de routage. Je l'ai mis à jour mon exemple de code ci-dessus, et voici mes itinéraires:

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

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

Je reçois toujours les mêmes résultats avec les paramètres, cependant.

+0

avez-vous trouvé ce qui était à l'origine fait cela? – burnside

Répondre

2

Avez-vous essayé d'utiliser le réglage de la route par défaut: {contrôleur}/{action}/{id}? En outre, sont-ils vos seules routes? Les routes sont évaluées en séquence, si une route précédente peut remplacer celle ci-dessous si elle correspond. Phil Haack a publié un débogueur de route dans son blog à haacked.com

Vous pouvez également jouer avec: RouteTable.Routes.GetVirtualPath(), en passant le ViewContext.RequestContext et un RouteValueDictionary voir l'URL résultante.

1

Je me demande si elle est liée à configurer votre routage vers le haut. Essayez de renommer promoId en id et de mettre à jour les valeurs de votre itinéraire. Si cela ne fonctionne pas, pourriez-vous mettre à jour votre message avec vos itinéraires?

1

Avez-vous essayé?

return RedirectToAction("GetPromo", new { id = promoId.ToString() }); 

Je pense que nous avons couru sur un problème similaire et cela a résolu le problème.

Sinon, vous pouvez le faire:

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

return RedirectToAction("GetPromo", dict); 

Et comme une recommandation, vous ne devriez pas utiliser Convert.ToInt32, utilisez int.Parse ou int.TryParse à la place.

Questions connexes