Problemi di Html.ActionLink
-
20-08-2019 - |
Domanda
Sto cercando di fornire un link per filtrare i risultati della ricerca.
<%= Html.ActionLink("Filter Results", "Index", new { page = Model.RestaurantList.PageIndex(), searchText = Model.SearchText, useFilter = true, filterOption = Model.FilterOption, filterText = Model.FilterText }, null)%>
La definizione del controller è come tale
public ActionResult Index(int? page, string searchText, bool useFilter, string filterText, string filterOption)
Tuttavia, quando eseguo il debug, i valori non vengono impostati correttamente, anche la variabile useFilter.
Il mio link è reso localhost / home / index / true? page = 0
Qualche idea su come risolvere questo problema?
Soluzione
Il segmento di codice sembra a posto. Penso che ci siano 2 possibili errori:
- Informazioni sul percorso errate: controllare il route.MapRoute (...) chiama file global.ascx.cs / vb per essere sicuri è una rotta per l'azione Indice casa # correttamente configurato
- Controller errato: prova a utilizzare il sovraccarico di ActionLink che specifica esplicitamente un controller
Se ancora non riesci a farlo funzionare, potresti voler pubblicare più informazioni (come codice di mappatura del percorso, nome della vista / controller)
Altri suggerimenti
Sembra che dovrebbe funzionare.
Hai verificato che i campi del modello che stai passando ad ActionLink contengano effettivamente dati?
Tuttavia, quando eseguo il debug, i valori non vengono impostati correttamente, anche la variabile useFilter. Il mio link è reso localhost / home / index / true? Page = 0
Penso che il tuo parametro useFilter sia effettivamente reso. È mappato sul percorso immagino.
Prova a impostare un valore codificato per searchText
Se compare, non hai impostato il tuo modello nel controller.
Ho avuto una situazione simile.
Qualcosa del genere:
Html.ActionLink("Click me", "Index", "Student",
{ ID = theclass.StudentID }, null)
viene sempre visualizzato come
localhost/myapp/Student/Index/1234
Mentre stavo sperimentando, ho notato che Index
parte è scomparsa dall'URL se cambio il nome del parametro da ID
a qualcosa come IDX
localhost/myapp/Student/?IDX=1234
Si scopre che il nome del parametro <=> è speciale a causa della voce di route predefinita in Global.asax.cs (che imposta il modello di accesso agli oggetti business RESTful)
Per ovviare a questo, ho semplicemente smesso di usare <=> per prendere un ID e invece ho definito un altro metodo come questo:
public ActionResult Detail(int ID)
Dopotutto, per principio di progettazione RESTfull, <=> è pensato per mostrare " lista di oggetti business " o una sorta di raccolta di oggetti business, non un singolo oggetto business. Quindi passare l'ID dell'oggetto business a <=> è una specie di violazione del modello.
Invece di girare il braccio e forzare il mio design imbarazzante, sono passato al modo naturale.
Credo che la migliore pratica per la progettazione di <=> entry point sia di mantenerlo senza parametri o passare solo i parametri di filtraggio / ordinamento.