HTML.ActionLink Problemas
-
20-08-2019 - |
Pergunta
Estou tentando fornecer um link para filtrar os resultados da pesquisa.
<%= Html.ActionLink("Filter Results", "Index", new { page = Model.RestaurantList.PageIndex(), searchText = Model.SearchText, useFilter = true, filterOption = Model.FilterOption, filterText = Model.FilterText }, null)%>
A definição do controlador é como tal
public ActionResult Index(int? page, string searchText, bool useFilter, string filterText, string filterOption)
No entanto, quando eu depurar isso, os valores não são definidos corretamente, mesmo a variável de filter de uso.
Meu link é renderizado localhost/home/index/true? Página = 0
Alguma idéia de como consertar isso?
Solução
O segmento de código parece bom. Eu acho que existem 2 erros possíveis:
- Informações erradas da rota: verifique as rotas de rotas.Maproute (...)
- Controlador errado: tente usar a sobrecarga de ação que especifica explicitamente um controlador
Se você ainda não consegue funcionar, pode postar mais informações (como o código de mapeamento de rota, nome de exibição/controlador)
Outras dicas
Parece que deve funcionar.
Você verificou que os campos do modelo que você está passando para o ActionLink realmente contêm dados?
No entanto, quando eu depurar isso, os valores não são definidos corretamente, mesmo a variável de filter de uso. Meu link é renderizado localhost/home/index/true? Página = 0
Eu acho que seu parâmetro de filter de uso é realmente renderizado. É mapeado para a rota, eu acho.
Tente definir um valor codificado para o SearchText
Se aparecer, você não definiu seu modelo no controlador.
Eu tive uma situação semelhante.
Algo assim:
Html.ActionLink("Click me", "Index", "Student",
{ ID = theclass.StudentID }, null)
sempre se renderiza como
localhost/myapp/Student/Index/1234
Enquanto experimentava, notei que Index
a parte desapareceu do URL se eu mudasse o nome do parâmetro de ID
para algo como IDX
localhost/myapp/Student/?IDX=1234
Acontece que o nome do parâmetro ID
é especial por causa da entrada de rota padrão no Global.asax.cs (que configura o padrão de acesso a objetos de negócios RESTful)
Para contornar isso, eu simplesmente parei de usar Index
Para pegar um ID e, em vez disso, definiu outro método como este:
public ActionResult Detail(int ID)
Afinal, por Princípio de Design Restfull, Index
destina -se a mostrar "listagem de objetos de negócios" ou algum tipo de coleção de objeto de negócios, não um único objeto de negócios. Então, aprovando o ID do objeto de negócios para Index
é meio que violar o padrão.
Em vez de torcer o braço e forçar meu design estranho, mudei para o caminho natural.
Eu acredito na melhor prática para projetar Index
O ponto de entrada é mantê-lo sem parâmetros ou passar apenas parâmetros de filtração/classificação.