P?GINA DE PESQUISA
Boa tarde!
No meu projeto existe uma página de pesquisa:
Gostaria de saber como faço para escolher um tipo de consulta e depois de digitar e clicar no botão, iniciar a pesquisa no banco de dados?
No meu pensamento, minha Controller teria que ficar mais ou menos assim:
Mas eu não estou sabendo como definir esse parâmetro [Ô]consulta[Ô] para a minha Controller saber como fazer a pesquisa;
Minha View Search está assim:
Alguém pode me ajudar por favor?
No meu projeto existe uma página de pesquisa:
Gostaria de saber como faço para escolher um tipo de consulta e depois de digitar e clicar no botão, iniciar a pesquisa no banco de dados?
No meu pensamento, minha Controller teria que ficar mais ou menos assim:
[HttpPost]
public ActionResult Search(string texto)
{
ModelState.Clear();
var query = db.Fornecedor;
object retornar = null;
if (consulta == [Ô]Nome[Ô])
{
retornar = query.Where(x => x.Nome.Contains(texto));
}
else if (consulta == [Ô]Cnpj[Ô])
{
retornar = query.Where(x => x.Cnpj.Contains(texto));
}
else if (consulta == [Ô]Cidade[Ô])
{
retornar = query.Where(x => x.Cidade.Contains(texto));
}
else if (consulta == [Ô]Estado[Ô])
{
retornar = query.Where(x => x.Estado.Contains(texto));
}
return View(retornar);
}
Mas eu não estou sabendo como definir esse parâmetro [Ô]consulta[Ô] para a minha Controller saber como fazer a pesquisa;
Minha View Search está assim:
@using (Html.BeginForm())
{
<table align=[Ô]center[Ô] border=[Ô]0[Ô]>
<tr>
<th valign=[Ô]middle[Ô] class=[Ô]rotulo[Ô] style=[Ô]width:120px;[Ô]>
Consultar por
</th>
</tr>
<tr>
<td>
@Html.DropDownList([Ô]Consulta[Ô], new List<SelectListItem>
{
new SelectListItem() {Text = [Ô]Nome[Ô], Value=[Ô]Nome[Ô]},
new SelectListItem() {Text = [Ô]Cnpj[Ô], Value=[Ô]Cnpj[Ô]},
new SelectListItem() {Text = [Ô]Cidade[Ô], Value=[Ô]Cidade[Ô]},
new SelectListItem() {Text = [Ô]Estado[Ô], Value=[Ô]Estado[Ô]}},
new { style = [Ô]width:80px;[Ô], @class = [Ô]dados[Ô] })
</td>
<td>
@Html.Editor([Ô]texto[Ô], new { htmlAttributes = new { @class = [Ô]form-control[Ô], autofocus = [Ô]autofocus[Ô] } })
</td>
<td>
 Â
<button type=[Ô]submit[Ô] class=[Ô]btn btn-success[Ô]>Pesquisar</button>
</td>
</tr>
</table>
}
Alguém pode me ajudar por favor?
Vamos lá:
Primeiro, o que você entende nesse código todo?
Primeiro, o que você entende nesse código todo?
Bom, Kerplunk, não entendi direito qual o propósito da sua pergunta, mas..... gostaria de saber.
Eu já consegui resolver o problema, tudo o que eu fiz foi simplesmente colocar mais um parâmetro na ActionResult, ficando assim:
public ActionResult Search(string texto, string consulta).
Eu já consegui resolver o problema, tudo o que eu fiz foi simplesmente colocar mais um parâmetro na ActionResult, ficando assim:
public ActionResult Search(string texto, string consulta).
Certo, você resolveu o problema, mas não sabe bem o que fez. Isso quer dizer que você continuará tendo problemas futuramente. Antes de sair codificando, tente entender o que está fazendo:
Você tem um formulário na view. Este form possui:
- Um dropdown chamado [Ô]consulta[Ô] que é a linha [Ô]@Html.DropDownList[Ô]
- Um textbox chamado [Ô]texto[Ô] que é a linha [Ô]@Html.Editor[Ô]
- Um botão de submit [Ô]<button type=[Ô]submit[Ô] class=[Ô]btn btn-success[Ô]>Pesquisar</button>[Ô], que é o que [Ô]envia[Ô] os dados do form para a controller
Na controller, você tem a assinatura do método, que recebe os parâmetros(campos ou textos) do form na view. Você não tinha no método da controller o parâmetro que recebia o valor da combobox, apenas o que recebia [Ô]texto[Ô] que se refere ao nome da textbox. Quando você colocou o parâmetro [Ô]consulta[Ô], então você fez com que a controller possa receber o parâmetro [Ô]Consulta[Ô](Atenção à maiúsculas e minúsculas aqui). Cada parâmetro dos métodos das controllers, representam um [Ô]campo[Ô] do form da view, Então se você tiver 20 campos, vai ter 20 parâmetros na consulta. Existem outras maneiras de fazer isso, do jeito que está fazendo é um deles.
Você tem um formulário na view. Este form possui:
- Um dropdown chamado [Ô]consulta[Ô] que é a linha [Ô]@Html.DropDownList[Ô]
- Um textbox chamado [Ô]texto[Ô] que é a linha [Ô]@Html.Editor[Ô]
- Um botão de submit [Ô]<button type=[Ô]submit[Ô] class=[Ô]btn btn-success[Ô]>Pesquisar</button>[Ô], que é o que [Ô]envia[Ô] os dados do form para a controller
Na controller, você tem a assinatura do método, que recebe os parâmetros(campos ou textos) do form na view. Você não tinha no método da controller o parâmetro que recebia o valor da combobox, apenas o que recebia [Ô]texto[Ô] que se refere ao nome da textbox. Quando você colocou o parâmetro [Ô]consulta[Ô], então você fez com que a controller possa receber o parâmetro [Ô]Consulta[Ô](Atenção à maiúsculas e minúsculas aqui). Cada parâmetro dos métodos das controllers, representam um [Ô]campo[Ô] do form da view, Então se você tiver 20 campos, vai ter 20 parâmetros na consulta. Existem outras maneiras de fazer isso, do jeito que está fazendo é um deles.
Valeu, Kerplunk, obrigado mais uma vez pela explicação, foi um [Ô]pequeno[Ô] erro que eu cometi.
Quando você diz:
Estou fazendo da maneira correta? Recomendada? Mais fácil? Mais difÃcil? é uma boa prática? Devo continuar ou adotar outras práticas?
Gostaria da sua opinião, pois sei que ela é sincera. Doa a quem doer, rsrsrs.
Quando você diz:
Citação:Existem outras maneiras de fazer isso, do jeito que está fazendo é um deles.
Estou fazendo da maneira correta? Recomendada? Mais fácil? Mais difÃcil? é uma boa prática? Devo continuar ou adotar outras práticas?
Gostaria da sua opinião, pois sei que ela é sincera. Doa a quem doer, rsrsrs.
Para esse caso, onde são poucos campos e valores, da maneira como fez está ok. Agora, imagine uma tela com 50 campos, incluindo sub-itens, enviar esses dados todos como parâmetros vai ser um pé no saco. Para isso, você usa um tipo anônimo que vai encapsular tudo no form em uma classe que será recebida no server(controller) e de lá você faz o que quer. Para isso, basta usar o form especificando uma classe:
Ao renderizar, o HTML produzido será:
<form action=[Ô]/Original Controller/Original Action?UserId=99[Ô] action=[Ô]post[Ô]>
Na controller, o pseudo-objeto(anônimo) recebido, conterá as propriedades [Ô]Nome[Ô] e [Ô]Senha[Ô]. Isso pode obviamente ser estendido para múltiplas propriedades. Por isso, na assinatura da controller seria algo como:
Aà basta usar as propriedades como quiser, e se for um objeto já com métodos prontos(como os exemplos que uso nos vÃdeos do meu canal) ou um objeto Entity Framework, basta executar os métodos:
@using (Html.BeginForm(new { UserId = [Ô]99[Ô] }))
{
@Html.TextBox([Ô]Nome[Ô]);
@Html.Password([Ô]Senha[Ô]);
<input type=[Ô]submit[Ô] value=[Ô]Login[Ô]>
}
Ao renderizar, o HTML produzido será:
<form action=[Ô]/Original Controller/Original Action?UserId=99[Ô] action=[Ô]post[Ô]>
Na controller, o pseudo-objeto(anônimo) recebido, conterá as propriedades [Ô]Nome[Ô] e [Ô]Senha[Ô]. Isso pode obviamente ser estendido para múltiplas propriedades. Por isso, na assinatura da controller seria algo como:
public ActionResult Search(Usuario usuario)
Aà basta usar as propriedades como quiser, e se for um objeto já com métodos prontos(como os exemplos que uso nos vÃdeos do meu canal) ou um objeto Entity Framework, basta executar os métodos:
public ActionResult Search(Usuario usuario)
{
usuario.Gravar();
}
Grande Kerplunk, mais uma vez obrigado pelas explicações: são muito boas.
Vou ficando por aqui
Até mais.
Vou ficando por aqui
Até mais.
Tópico encerrado , respostas não são mais permitidas