2012-04-17 7 views
20

Ich verwende ASP.Net MVC. Hier ist mein Code-Schnipsel aus einem Controller mit dem Namen Course:URL.Action enthält ID beim Erstellen der URL

public ActionResult List(int id) 
{ 
    var viewmodel.ShowUrl = Url.Action("Show", "Course"); 


    ... 
} 

public ActionResult Show(int id) 
{ 
    ... 
} 

viewmodel.ShowUrl aufgreift, was auch immer der Wert der Parameter „ID“ ist. So wird viewmodel.ShowUrl zu "/ Course/Show/151" (Wert der ID ist 151); Ich möchte den ID-Teil auf dem Client basierend auf Benutzerinteraktion festlegen können. Ich möchte, dass der Wert von viewmodel.ShowUrl "/ Course/Show" lautet.

Das scheint wie ein Fehler für mich. Ich werde Url.Action nicht mitteilen, einen ID-Wert anzugeben. Es macht es alleine. Wenn ich die ID-Wert einstellen wollen, dann würde ich so etwas tun:

var viewmodel.ShowUrl = Url.Action("Show", "Course", new {id = somevalue}); 

Also, wie Sie MVC verhindern, dass das Hinzufügen der ID-Wert? Ich kann viewmodel.ShowUrl zu "/ Course/Show" fest codieren, aber das scheint eine kludgy Lösung zu sein. Vielen Dank.

+0

Ich kann nicht genau remeber zu lösen, aber die 'Routedata' ist auf' ViewData' und das ist, warum es passiert ist. Ich denke, Sie können 'Url.Action (" Show "," Course ", new {});' oder leeren Sie das 'RouteData' auf' ViewData' Objekt. –

Antwort

7

Ich rate in Ihrem Routing, Sie nicht angeben, dass die ID ist ein optionaler Parameter. Hier ist die Standardroute in einem Beispielprojekt.

Beachten Sie die Aufnahme von id = UrlParameter.Optional. Ohne das würden Sie das Verhalten erhalten, das Sie beschreiben, weil es die ID für obligatorisch hält.

Wenn Ihre Aktion "Anzeigen" nicht immer eine ID hat, sollte sie nullerbar sein oder einen Standardwert enthalten.

public ActionResult Show(int? id) 
public ActionResult Show(int id = 0) 

Andernfalls erhalten Sie eine Fehlermeldung, wenn Sie versuchen, die URL ohne den ID-Parameter zu laden.

19

kam gerade über das gleiche Problem und so wissen Sie, können Sie auch nur eine leere Zeichenfolge:

@Url.Action("Show", "Course", new { id = "" }) 
9

Ich weiß, das ist alt, aber ich fand das erste, aber nicht wie jeder Diese Lösungen, so habe ich weiter gesucht und https://stackoverflow.com/a/19110921/1130636 gefunden.

können Sie UrlParameter.Optional verwenden dieses Problem

Url.Action("Show", "Course", new { id = UrlParameter.Optional })