2009-01-28 16 views
6

Ich erstelle eine Menge von Aktionen in MVC-Controller.ASP.NET MVC Html.ActionLink Ergebnis URL - die Art der Codierung

public ActionResult DoSmth1(string token) 
public ActionResult DoAnother2(string token) 

Und wenn ich Action nennen ..

=Html.ActionLink<SomeController>(x=> x.DoSmth(item.property), item.property) 
=Html.ActionLink<AnotherController>(x=> x.DoAnother(item.property), item.property) 

... es erzeugt mir verschiedene URLs:

/Some/DoSmth/stringvalue 
/Another/DoAnother?property=stringvalue 

Wo die Art und Weise festlegen es eine URL baut? Ich bin ALR keine Ideen haben ... ((


OK, ein paar WAYLIGHT bekam: - wenn die Eigenschaftsnamen identisch sind, die in Routing-Schema verwendet - zB Controller, Aktion und id - die MVC wird immer die Route Builder verwenden (/ c/a/id)

das hilft ein wenig. (so - Namen der Parameter "id" wie möglich))

Aber das Gesamtproblem ist nach wie vor gültig ...


muss das gleiche wie das Token in der

Genau Route genannt werden - ich hatte zuerst die Idee.

Aber - jetzt habe ich nur Standardroute ({Controller}/{Aktion}/{ID}) aber immer noch die URL mit "Eigenschaft" in Schrägstrichen ... Das ist ziemlich seltsam.

  • gibt es auch ein Cheater Weg - eine genaue Route zu erstellen, die mit seinen Parameternamen einen bestimmten Controller übereinstimmen - scheint, dass wird die ultimative Antwort sein - aber ich will noch nicht über diese (tun (

Antwort

4

Sie zeigen Ihre Routen nicht an, aber in diesem Beispiel treffen Sie mit Sicherheit auf verschiedene Routen. Das Argument für Ihre Aktion muss genauso benannt sein wie das Token in der Route, damit die generierte URL mit der übereinstimmt route token mit der Lambda-Form von ActionLink: Alles, was nicht mit einem Routing-Token übereinstimmt, wird wie bei der zweiten URL als Abfragezeichenfolgeparameter angehängt ame, die Sie implizit übergeben haben ("Eigenschaft" in diesem Fall), stimmt nicht mit einem Routentoken überein. Da Sie mit demselben Token-Namen unterschiedliche Ergebnisse erhalten, folge ich daraus, dass Sie unterschiedliche Routen fahren. Ich empfehle übrigens, Links mit RouteLink statt mit ActionLink zu erstellen, damit Sie sicher sein können, welche Route Sie finden.

Verwandte Themen