2009-08-12 4 views
2

Was ich tun möchte, ist eine Seite unter /Products/Details/{id}, die zu den Aktionsdetails auf ProductsController und auch eine Bearbeitungsseite bei /Products/Details/Edit/{id} führt.ASP.NET MVC Routing: Kann ich einen Aktionsnamen mit einem Schrägstrich darin haben?

Ich habe versucht, dies mit [ActionName("Details/Edit")] auf die Aktion zu tun, aber das funktioniert nicht.

+0

Warum nicht einfach EditDetails nennen? – RichardOD

+0

Weil das nicht mit der URL übereinstimmt, die ich erreichen möchte. –

Antwort

5

Sie können keinen Schrägstrich in Ihrem Aktionsnamen haben.

Warum nicht die folgenden Aktionen ausführen?

  • /Produkte/Details/{id} -Für Anzeige
  • /Produkte/Edit/{id} -Für bearbeiten

Meine Präferenz wäre folgendes zu tun:

  • /Produkte/{id}/Ansicht -Für Anzeige
  • /Produkte/{id}/edit/-Für bearbeiten

Hoffe das macht Sinn!

+0

, weil jedes Produkt eine Anzahl von Ansichten hat. Details, Verlauf, Dokumente usw. Jede dieser Seiten soll in einem Ansichts- und Bearbeitungsformular dargestellt werden. –

+1

Allerdings mag ich das Routing-Muster, das Sie beschreiben./Produkte/{id}/Details und/Produkte/{id}/Details/Bearbeiten wäre vollkommen akzeptabel. –

+0

Ich würde noch weiter gehen und nur die/Details/zum Anzeigen eines Produkts ie/products/{id} entfernen und könnte/products/edit/{id} – David

1

Add route wie diese VOR der Standard ein:

routes.MapRoute(
    "DefaultWithDetails", 
    "{controller}/Details/{action}/{id}"}, 
    null); 
+0

+1 tun, was JayArr verlangt, obwohl ich das semantisch denke Lewis Vorschlag ist eine bessere Idee. –

+0

James, ja. Ich stimme zu. Aber ich habe gerade die Frage beantwortet :) –

1

Was können Sie tun, ist dies. Richten Sie eine neue Route wie diese vor der Standardroute ein;

dann in Ihrem Produkte-Controller haben Ihre Aktion so, beachten Sie, dass die Parameternamen die Namen in der Route übereinstimmen.

public ActionResult Details(string action2, string id) 
{ 
    switch (action2) 
    { 
     case "edit": 
      // Do Something. 
      return View("edit"); 
     case "view": 
      // Do Something. 
      return View("view"); 
     default : 
      // Do Something. 
      return View("bad-action-error"); 
    } 
} 

Jetzt wird die Aktion Details action2 und die ID von der URL übergeben. Also eine URL wie/products/details/view/7 die Details Aktion wird "view" und "7", dann können Sie einen Schalter oder if Anweisung auf action2 verwenden, um Ihre Verarbeitung fortzusetzen. Dies kann nun leicht um weitere Unteraktionen erweitert werden.