2009-06-28 18 views
0

Ich versuche, einen Link zum Filtern von Suchergebnissen bereitzustellen.Html.ActionLink Probleme

<%= Html.ActionLink("Filter Results", "Index", new { page = Model.RestaurantList.PageIndex(), searchText = Model.SearchText, useFilter = true, filterOption = Model.FilterOption, filterText = Model.FilterText }, null)%> 

Die Controller-Definition ist als solche

public ActionResult Index(int? page, string searchText, bool useFilter, string filterText, string filterOption) 

Allerdings, wenn ich debuggen diese die Werte nicht richtig eingestellt ist, auch die useFilter Variable.

Mein Link gemacht wird localhost/home/index/true? Page = 0

Irgendwelche Ideen, wie dieses Problem beheben?

Antwort

2

Das Code-Segment sieht gut aus. Ich denke, es gibt zwei mögliche Fehler:

  1. Falsche Routeninformationen: Überprüfen Sie die routes.MapRoute (...) ruft in global.ascx.cs/vb Datei sicher eine Route für Heim # Index zu machen Aktion richtig
  2. Falsche Controller konfiguriert: versuchen, die Überlastung von Action verwenden, die explizit einen Controller

Wenn Sie es noch, möchten Sie vielleicht weitere Informationen veröffentlichen (wie Trassierung arbeiten kann nicht machen spezifiziert Code, Name der Ansicht/Controller)

+0

Es war ein Routenproblem. Ich habe die Reihenfolge übersehen, in der ich die Routen hinzugefügt habe. – ddd

0

Es sieht aus wie es sollte funktionieren.

Haben Sie verifiziert, dass die Modellfelder, die Sie an den ActionLink übergeben, tatsächlich Daten enthalten?

0

Allerdings, wenn ich dies debuggen die Werte sind nicht richtig eingestellt, auch die useFilter-Variable. Mein Link gemacht wird localhost/home/index/true? Page = 0

Ich denke, Ihr useFilter Parameter tatsächlich wiedergegeben wird. Es ist auf die Route gemappt.

Versuchen für den Such

Wenn es auftaucht, dann haben Sie nicht gesetzt Ihr Modell in der Steuerung einen fest codierten Wert zu setzen.

0

Ich hatte eine ähnliche Situation.

Etwas wie folgt aus:

Html.ActionLink("Click me", "Index", "Student", 
     { ID = theclass.StudentID }, null) 

immer macht als

localhost/myapp/Student/Index/1234 

Während ich experimentierte, bemerkte ich, dass Index Teil der URL verschwunden, wenn ich den Parameternamen von ID etwas ändern wie IDX

localhost/myapp/Student/?IDX=1234 

Es stellt sich heraus, dass der Parametername ID wegen des Standard-Routeneintrags in Global.asax speziell ist.cs (die RESTful-Business-Objektzugriffsmuster einrichtet)

Um dies zu umgehen, hörte ich einfach Index mit einer ID zu nehmen und definiert stattdessen eine andere Methode wie folgt aus:

public ActionResult Detail(int ID) 

Immerhin pro Restfull Design Prinzip, Index ist für die Anzeige "Auflistung von Geschäftsobjekten" oder eine Art von Sammlung von Business-Objekt, kein einzelnes Business-Objekt gemeint. Die Übergabe der Geschäftsobjekt-ID an Index verstößt daher gegen das Muster.

Anstatt den Arm zu verdrehen und mein ungeschicktes Design zu erzwingen, änderte ich auf natürliche Weise.

Ich glaube, die beste Praxis für die Gestaltung Index Einstiegspunkt ist es parameterlos zu halten, oder nur Filter/Sortierparameter übergeben.

Verwandte Themen