2016-04-05 16 views
0

In meiner Website mit Paging-und Suchoptionen muss ich den Benutzer umleiten und die Suchoptionen übergeben. Mit dieser Aktion möchte ich das Suchmodell nicht mit der URL übergeben (zB .).Pass Parameter mit Html.ActionLink basierend auf Wert

Meine Action jetzt wie folgt:

@Html.ActionLink(i.ToString(), "Index", new { idtrips = Model.idTrips, inituser = Model.initUser, date = Model.date.ToString("ddMMyyyy"), page = i}) 

Beim Anklicken führt dies zu einem folgenden Header: http://localhost:58763/?idtrips=0&inituser=0&date=05042016&page=5

Meine Frage ist: Kann man irgendwie, wenn Klauseln auf Html hinzufügen .ActionLink, um nur Werte anzugeben, wenn sie benötigt werden. Zum Beispiel habe ich nur ein Datum gesetzt, dann möchte ich die URL sein: http://localhost:58763/?date=05042016&page=5. Die anderen Werte haben einen Standardwert in meinem Controller, so dass diese URL funktioniert, aber ich kann sie nicht erzeugen.

Mein Controller:

public ActionResult Index(long idtrips = 0, long inituser = 0, string date = "", int page = 1) 
    { ... } 

Was ich suche ist so etwas wie dieses ,:

@Html.ActionLink(i.ToString(), "Index", new { if(Model.idTrips > 0) { idtrips = Model.idTrips,} page = i}) 

Antwort

1

Sie könnten wahrscheinlich dies erreichen mit einem ternary statement (zB ein Inline-if-Anweisung):

new { idtrips = Model.idTrips > 0 ? Model.IdTrips : 0, page = i} 

Da Sie einen Standard-Parameterwert für idtrips haben, t sein sollte nur auf etwas anderes setzen, wenn es größer als 0 ist.

Wenn Sie möchten, dass der Wert überhaupt nicht angezeigt wird, können Sie einfach einen Nullwert lang Parameter (und stellen Sie sicher, dass dies auf Ihrem entspricht) Modell als auch):

public ActionResult Index(long? idtrips = 0, ...) { ... } 

Mit diesem Ansatz, könnten Sie einfach eingestellt wie erwartet:

new { idtrips = Model.idTrips, page = i} 

Und wenn Model.idTrips war null (zB der Standardwert), dann wäre es verweisen auf:

Controller/Index?page=1 

jedoch, ob es einen Wert ungleich Null ist, die Abfragezeichenfolgeflag Parameter wie erwartet machen würde:

Controller/Index?idtrips=42&page=1 
+0

Aber das wird mir noch geben die URL "http: // localhost: 1234 /? Idtrips = 0 & page = 5" Und das möchte ich vermeiden. es sollte wie neu {page = 5} oder neu {Idtrips = 1, page = 5} und inline sein. nicht mit einer if- oder switch-Anweisung über den Html.ActionLink –

+0

Sie sollten in Betracht ziehen, Ihren 'idtrips' -Parameter auf Null zu setzen (und auf Ihrem Modell NULL-Werte zuzulassen). Dies würde Ihnen den beabsichtigten Effekt geben, nach dem Sie suchen (d. H. Keine Anzeige Ihres 'idtrips' -Parameters, wenn Null, obwohl er standardmäßig auf 0 gesetzt würde und ansonsten den Parameter anzeigen würde). –

+0

Ich änderte sie in nullbare Werte und es funktioniert wie ich will. Danke für deine schnelle Hilfe! –

Verwandte Themen