2009-06-04 8 views
0

J'ai un formulaire html simple avec quelques zones de saisie. Quand je clique sur sauvegarder, il trouve la bonne méthode mais les données sont bizarres. Lorsque j'ai un nom de champ de formulaire qui est le même nom qu'un champ dans la route, la valeur transmise est mes données de champ de formulaire, pas les données de route.Problème bizarre lors de la publication d'une action ASP.NET MVC

par exemple.

Imaginez que vous avez la route suivante.

// Both Get/Post 
routes.MapRoute(
    "User-Edit", 
    "user/{displayName}/edit", 
    new { controller = "Account", action = "edit" }); 

et la méthode suivante ...

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit([Bind(Exclude = "UserId")]string displayName, 
           FormCollection formValues) 

{...}

Maintenant, remarquez comment la route a la variable displayName et l'action du contrôleur a également appelé un argument displayName ? Eh bien, les données d'argument sont celles du formulaire, PAS la route.

Je ne sais pas comment je peux m'assurer que les données d'argument sont les données de route?

Est-ce que le seul correctif ici pour moi de renommer la variable route, de displayName à routeDisplayName ou peu importe?

Répondre

1

Les conventions ModelBinding stipulent qu'un paramètre est peuplé de:

  • une valeur Request.Form si elle existe (! Le vôtre)
  • puis, RouteData.Values ​​
  • Request.QueryString puis
  • null puis

vous devez (a) remplacer ce comportement par défaut ou (b) renommer la valeur de votre itinéraire.

Je voudrais aller avec b.

Mike

+0

El wikid :) acclamations. –

Questions connexes