Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Como enviar o conteúdo (string) do input de BuscaDeProduto.cshtml para a action no controller?

Não consigo enviar o conteúdo que o usuário escreve no campo de texto para que seja renderizada a página com os resultados. Já testei minhas action e métodos de pedidoRepository atribuindo um valor para a string do construtor e eles funcionam gerando a página corretamente.

"(...)porém enviando o texto de busca que foi preenchido no formulário"

Este é o código do meu formulário:

 <form asp-action="BuscaDeProdutos">
                        <input asp-for="@Model.Pesquisa" type="text" name="pesquisa" class="form-control input-lg" placeholder="categoria ou produto" id="pesquisa"  value=" " />
                        <span class="input-group-btn">
                            <button class="btn btn-info btn-lg" type="submit" >
                                <i class="glyphicon glyphicon-search"></i>
                            </button>
                        </span>
  </form>

Falta algo, tentei procurar e não consegui.

6 respostas

Olá Gustavo, tudo certo?

O valor que é enviado para a action é justamente o conteúdo do value do input. No código acima ele está vazio: value=" "

Mas é aqui onde deve ser feito o binding da propriedade do seu modelo: value="@(Model.Pesquisa)"

Tente fazer a alteração e veja se funciona.

No aguardo!

Beleza Fabiano! Muito obrigado pela resposta. Essa é a modificação necessária do lado do arquivo cshtml. Como farei para acessar esse valor no método BuscaDeProdutos (copiado abaixo). No meu código eu estou com um "string busca" pois não sei como acessar a string que foi enviada pela action.

 public async Task<IActionResult> BuscaDeProdutos(string busca )
        {
                       var produtosViewModel = new BuscaDeProdutosViewModel(await produtoRepository.GetProdutos(busca),busca);
            return View(produtosViewModel);
        }

Gustavo, tente marcar tanto o método com atributos marcando que o parâmetro pode ser recebido tanto por get como set:

[HttpPost]
[HttpGet]
public async Task<IActionResult> BuscaDeProdutos(string busca )

Com isso receberá tanto da URL, quanto do corpo da requisição.

Fabiano, fiz as alterações sugeridas e continuo obtendo sempre null na minha string busca. Segue o link do meu projeto:

https://github.com/Gustavo-T-Carvalho/Alura_Projeto_.NET

Muito obrigado pela atenção.

solução!

Gustavo, consegui encontrar o problema, que é justamente referente às palavras Busca e Pesquisa. Na terceira funcionalidade foi pedido que fizesse a ViewModel, e outras coisas utilizando a palavra pesquisa, mas a ViewModel tem uma propriedade chamada Busca e é aí que tudo começa dar problema.

A propriedade name do input está como pesquisa e é esse o nome da propriedade que está chegando no método GetProdutos(string busca), porém como mostrei agora, esse método espera uma propriedade name=busca e isso causa o conflito para receber a string.

Minha sugestão é que padronize ou as propriedades se chamam Busca ou se chamam Pesquisa tanto na ViewModel, quanto no controller, e na View.

No aguardo.

Perfeito Fabiano. Era isso. Muito obrigado.