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?

È stato utile?

Soluzione

Il segmento di codice sembra a posto. Penso che ci siano 2 possibili errori:

  1. 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
  2. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top