Problemas de HTML.ActionLink
-
20-08-2019 - |
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?
Solución
El segmento de código se ve bien. Creo que hay 2 posibles errores:
- 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
- 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.