2009-05-20 8 views
2

Ich versuche herauszufinden, wie man optional einen routeValue setzt.ASP.NET MVC RouteLink und optional routeValues ​​

Ich habe

<%= Html.RouteLink("<<<","Products",new { page=(Model.Products.PageIndex) }) %> 

Wenn ein Besucher auf einer „Kategorie“ Ich klickt nur zeigen Produkte dieser Kategorie, aber wenn es keine „Kategorie“ ist zeige ich alle Produkte.

Diese 2 URLs wäre gültig:

/Produkte/Seite

/Produkte/Seite Kategorie = Autos

Der Routelink in meinem Pager ist so dachte ich, ich irgendwie die Kategorie passieren könnte? Parameter in den Links im Pager, um die Kategorie zwischen den Seiten beizubehalten. Ich bin mir jedoch nicht sicher, wie ich mit dem Fall umgehen soll, in dem keine Kategorie gewählt wird und nicht, wenn eine Kategorie ausgewählt wird.

Ich weiß, ich kann dies tun:

<%= Html.RouteLink("<<<","Products",new { page=(Model.Products.PageIndex), category=cars }) %> 

Aber ist es möglich, beide Fälle zu behandeln, ohne etwas umständlich if-Anweisung zu erstellen?

Antwort

3

Es ist nur eine Idee, aber können Sie nicht einfach einen leeren Kategorie-Parameter übergeben?

Und in Ihrem Produktcontroller, wo Sie die Seite bekommen, nur überprüfen, ob es existiert oder nicht?

public ActionResult Index(int page, string category) 
{ 
    ViewData["CategoryName"] = category; 

    if(!string.IsNullOrEmpty(category)){ 
     //paging with category 
    }else{ 
     //paging without category 
    } 
    return View("Create"); 
} 

Oder meinst du das mit "peinliche if-Aussage"?

+0

Danke für das detaillierte Beispiel. Ich wusste nicht, dass, wenn Sie leer oder Null in die routValues ​​übergeben, es den Wertnamen nicht ausgeben würde. Sehr cool! – dtc

+0

Mein Vergnügen, froh, dass ich helfen konnte – Peter

2

Wenn Autos Variable null oder eine leere Zeichenfolge ist, wird Html.RouteLink Methode Kategorie Parameter nicht automatisch hinzufügen URL. Sie müssen keine zusätzlichen Prüfungen durchführen.

+0

Danke. Vielleicht liegt es daran, dass ich nicht daran gewöhnt bin oder vielleicht bin ich nur dumm, aber langsam beginne ich, die Konventionen von asp.net MVC zu verstehen ... obwohl es mir oft wie "magisch" erscheint. – dtc