PÁGINA DE PESQUISA

 Tópico anterior Próximo tópico Novo tópico

PÁGINA DE PESQUISA

ASP.NET

 Compartilhe  Compartilhe  Compartilhe
#469336 - 30/11/2016 16:18:19

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Última edição em 30/11/2016 16:19:29 por PERCIFILHO

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:

        [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?


____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#469339 - 30/11/2016 22:16:38

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Vamos lá:
Primeiro, o que você entende nesse código todo?

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#469346 - 01/12/2016 08:25:48

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


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).


____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




Resposta escolhida #469357 - 01/12/2016 17:56:42

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
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.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#469365 - 02/12/2016 07:30:44

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Valeu, Kerplunk, obrigado mais uma vez pela explicação, foi um "pequeno" erro que eu cometi.
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.

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#469383 - 02/12/2016 22:56:19

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
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:

@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();
}


_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#469418 - 05/12/2016 07:17:15

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Grande Kerplunk, mais uma vez obrigado pelas explicações: são muito boas.
Vou ficando por aqui
Até mais.

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por PERCIFILHO em 05/12/2016 15:02:01