2016-05-25 22 views
1

Ich arbeite an einer ASP.NET MVC App. In meiner Anwendung habe ich einen Controller, der wie folgt aussieht:ASP.NET MVC - Eine Route erhalten

[RoutePrefix("account/orders")] 
public partial class AccountOrdersController : Controller 
{ 
    [Route] 
    public virtual ActionResult Index() 
    { 
    return View(); 
    } 

    [Route("add")] 
    [Route("~/dashboard/orders/{orderId}/item")] 
    public virtual ActionResult Add(string orderId) 
    { 
    return View(); 
    } 
} 

in der Indexansicht, ich Referenzierung der Add-Aktion wie folgt aus:

var url = '@Url.Action("Add", "AccountOrdersController", new RouteValueDictionary(new { orderId = "xyz" }))'; 

Wenn die Ansicht gerendert wird, über die wird :

var url = '/account/orders/add?orderId=xyz'; 

wie kann ich die oben als sein get gemacht:

var url = '/account/orders/xyz/item'; 

Ich versuche eine URL zu erstellen, die ein vollständiger Pfad ist, anstatt nur Abfragezeichenfolgenparameter anzuhängen.

Antwort

0

MVC schließt die Leitungen immer kurz. Die Route /account/orders/add ist absolut gültig, da die Abfragezeichenfolge willkürlich ist: Sie kann einfach alles einwerfen, was übrig geblieben ist. Wenn Sie einen komplexeren Weg über eine Aktion mögen, die eine einfachere Route hat, dann die einzige Möglichkeit ist, um die Strecke zu benennen und gezielt nach Namen zu bekommen:

[Route("~/dashboard/orders/{orderId}/item", Name="DashboardOrderAdd")] 

Dann:

@Url.RouteUrl("DashboardOrderAdd", new { orderId = "xyz" }) 
1

Bei der Anwendung Mehrere Routen Sie können die Reihenfolge festlegen, in der die Route angewendet wird. Verwenden Sie dazu die Order-Eigenschaft auf dem Attribut [Route]. Standardmäßig haben alle definierten Routen einen Order-Wert von 0 und Routen werden vom niedrigsten zum höchsten verarbeitet.

[Route("add", Order = 2)] 
[Route("~/dashboard/orders/{orderId}/item", Order = 1)] 
public virtual ActionResult Add(string orderId){...} 
Verwandte Themen