J'ai quelque chose de similaire à la méthode suivante:Asp.Net MVC Beta: RouteData précédente remplace la RouteData actuelle?
public ActionResult Details(int id)
{
var viewData = new DetailsViewData
{
Booth = BoothRepository.Find(id),
Category = ItemType.HotBuy
};
return View(viewData);
}
et l'itinéraire suivant:
routes.MapRoute("shows","shows/{controller}/{action}/{id}", new {id = 0});
Tout fonctionnait bien avant la version bêta, quand j'avais aperçu 3. Maintenant, la méthode remplit l'ID correctement la première fois que j'exécute l'action. Toutefois, la deuxième fois que le contrôleur ModelState
contient la valeur de l'ID de dernière utilisation. Cela provoque le ActionInvoker
pour l'utiliser dans le paramètre de la méthode au lieu de la valeur Route
.
Donc, si j'appelle l'action deux fois sur deux entités différentes les résultats sont tels:
www.mysite.com/shows/Booth/Details/1 => Details(1)
www.mysite.com/shows/Booth/Details/2 => Details(1) //from ModelState["id"]
De mon analyse rapide avec réflecteur, il semble qu'il se lie d'abord des paramètres à la ModelState puis aux routes. Cependant, je n'ai jamais rien posté du modèle. Autant que je sache, ModelState ne devrait rien contenir.
Est-ce un bug dans la version bêta, peut-être un bug quelque part dans mon code, ou y a-t-il un élément de design que j'ignore? Tout aperçu de la nature de ModelState et pourquoi cela arrive est apprécié.
EDIT: Je découvert que cette question est en fait un symptôme de ce qui semble être un bug avec le DefaultValueProvider si vous instancier un contrôleur à partir d'un conteneur IoC qui existe pour la durée de vie du Asp.Net application.What arrive est que DefaultValueProvider utilise le premier ControllerContext donné au contrôleur et ne le met jamais à jour jusqu'à ce que le contrôleur soit recréé. Cela entraîne l'utilisation de l'ancien RouteData pour les paramètres de la méthode au lieu du RouteData actuel.
Pourriez-vous marquer l'une des réponses ci-dessous comme réponse, alors je ne continuerai pas à répondre à cette question. : P – Haacked