2009-08-14 4 views
1

Ich baue ein Helpdesk-Ticket-System für einen Client mit ASP.NET MVC 1.0/C#. Ich habe Steven Sanderson's "App Areas in ASP.NET MVC, Take 2" implementiert und es funktioniert super.ASP.NET MVC-Bereiche und Erstellen eines ActionLink mit ID (SEO/saubere URL)

In meiner Globabl.asax Seite habe ich einige Routen als solche definiert:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    // Routing config for the HelpDesk area 
    routes.CreateArea("HelpDesk", "ProjectName.Areas.HelpDesk.Controllers", 
     routes.MapRoute(null, "HelpDesk/{controller}/{action}", new { controller = "Ticket", action = "Index" }), 
     routes.MapRoute(null, "HelpDesk/Ticket/Details/{TicketId}", new { controller = "Ticket", action = "Details", TicketId = "TicketId" }) 
    ); 
}

Also, wenn ich „http://localhost/HelpDesk/Ticket/Details/12“ in der Browser-Adressleiste manuell eingeben, erhalte ich die Ergebnisse erwarte ich. Hier ist mein Controller:

public ActionResult Details(int TicketId) 
{ 
    hd_Ticket ticket = ticketRepository.GetTicket(TicketId); 
    if (ticket == null) 
     return View("NotFound"); 
    else 
     return View(ticket); 
}

Aus meiner Sicht habe ich:

<%= Html.ActionLink(item.Subject, "Details", new { item.TicketId })%> 

Aber das Code generiert "http://localhost/HelpDesk/Ticket/Details?TicketId=12", die auch die erwarteten Ergebnisse. Meine Frage ist ...

Wie definiere ich einen ActionLink bei der Verwendung von Steven Sanderson Areas, die eine saubere URL wie erstellen wird: "http://localhost/HelpDesk/Ticket/Details/12"?

Antwort

4

<%= Html.ActionLink(item.Subject, "Details", new { TicketId = item.TicketId })%> 

Die Action Methode erwartet ein Wörterbuch mit Schlüssel Versuchen, die die Parameternamen übereinstimmen. (Beachten Sie, dass das Übergeben eines anonymen Objekts eine Erleichterung darstellt). Alles andere, glaube ich, wird es nur am Ende der URL markieren.

EDIT: Der Grund, dass dies für Sie nicht funktioniert, ist, weil Ihre erste Route übereinstimmt und Vorrang (Controller und Aktion), aber keine TicketId-Parameter definiert. Sie müssen die Reihenfolge Ihrer Routen ändern. Sie sollten immer zuerst Ihre spezifischen Routen angeben.

+0

Womp ... da ist es! Du hast Recht. Es war der Befehl! – robnardo

1

Versuchen

<%= Html.ActionLink(item.Subject, "Details", new { TicketId=item.TicketId })%> 
1

Ich denke, Womp es hat ...

Oh, und während Sie Ihre Routen tauschen versuchen

routes.MapRoute(null, "HelpDesk/Ticket/Details/{TicketId}", new { controller = "Ticket", action = "Details"}) 

Ich denke, die, TicketId = "id" ist Dinge

Hoffnung Messing, das hilft,

Dan

+0

danke Dan, das hat auch funktioniert – robnardo

Verwandte Themen