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?

Foi útil?

Solução

O segmento de código parece bom. Eu acho que existem 2 erros possíveis:

  1. Informações erradas da rota: verifique as rotas de rotas.Maproute (...)
  2. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top