Pregunta

Estoy intentando proporcionar un enlace para filtrar los resultados de búsqueda.

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

La definición del controlador es como tal

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

Sin embargo, cuando depuro esto, los valores no se establecen correctamente, incluso la variable useFilter.

Mi enlace se representa localhost / home / index / true? page = 0

¿Alguna idea de cómo solucionar esto?

¿Fue útil?

Solución

El segmento de código se ve bien. Creo que hay 2 posibles errores:

  1. Información de ruta incorrecta: verifique el routes.MapRoute (...) invoca archivo global.ascx.cs / vb para asegurarse una ruta para la acción del índice de inicio # es configurado correctamente
  2. Controlador incorrecto: intente utilizar la sobrecarga de ActionLink que especifica explícitamente un controlador

Si aún no puede hacerlo funcionar, es posible que desee publicar más información (como el código de asignación de ruta, el nombre de la vista / controlador)

Otros consejos

Parece que debería funcionar.

¿Ha verificado que los campos del modelo que está pasando al ActionLink realmente contienen datos?

  

Sin embargo, cuando depuro esto, los valores no se establecen correctamente, incluso la variable useFilter.   Mi enlace se representa localhost / home / index / true? Page = 0

Creo que su parámetro useFilter se representa realmente. Está asignado a la ruta, supongo.

Intente establecer un valor codificado para searchText

  

Si aparece, entonces no configuró su modelo en el controlador.

Tuve una situación similar.

Algo como esto:

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

siempre se muestra como

localhost/myapp/Student/Index/1234

Mientras estaba experimentando, noté que la parte Index desaparecía de la URL si cambiaba el nombre del parámetro de ID a algo así como IDX

localhost/myapp/Student/?IDX=1234

Resulta que el nombre del parámetro <=> es especial debido a la entrada de ruta predeterminada en Global.asax.cs (que configura el patrón de acceso a objetos de negocios RESTful)

Para evitar esto, simplemente dejé de usar <=> para tomar una identificación y en su lugar definí otro método como este:

public ActionResult Detail(int ID)

Después de todo, según el principio de diseño RESTfull, <=> está destinado a mostrar " listado de objetos comerciales " o algún tipo de colección de objeto comercial, no un solo objeto comercial. Por lo tanto, pasar el ID del objeto comercial a <=> es una especie de violación del patrón.

En lugar de girar el brazo y forzar mi diseño incómodo, cambié a la forma natural.

Creo que la mejor práctica para diseñar el punto de entrada <=> es mantenerlo sin parámetros o pasar solo parámetros de filtración / clasificación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top