2009-06-04 5 views
0

Ich habe ein einfaches HTML-Formular mit ein paar Eingabefeldern. Wenn ich auf Speichern klicke, wird die richtige Methode gefunden, aber die Daten sind seltsam. Wenn ich einen Formularfeldnamen habe, der den gleichen Namen wie ein Feld in der Route hat, ist der übergebene Wert meine Formularfelderdaten, nicht die Routendaten.Seltsames Problem beim Posten in einer ASP.NET MVC-Aktion

zum Beispiel.

Stellen Sie sich vor, Sie haben die folgende Route.

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

und die folgende Methode ...

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

{...}

nun feststellen, wie die Route hat die Variable displayName und die Controller-Aktion hat auch ein Argument genannt displayName ? Nun, die Argumentdaten sind die aus dem Formular, NICHT die Route.

Ich bin mir nicht sicher, wie ich sicherstellen kann, dass die Argumentdaten die Routendaten sind?

Ist der einzige Fix hier für mich, um die Route Variable, von displayName zu routeDisplayName oder was auch immer ..?

Antwort

1

Die ModelBinding Konventionen festgelegt, dass ein Parameter aus bevölkert:

  • ein request.form Wert, wenn es vorhanden ist (! Ihr tut)
  • dann, RouteData.Values ​​
  • dann
  • Request.QueryString
  • dann null

Sie (a) außer Kraft setzen dieses Standardverhalten oder (b) benennen Sie Ihre Route Wert haben würde.

Ich würde mit b gehen.

Mike

+0

El wikid :) Prost Mate. –