none
Consulta com mais de um campo RRS feed

  • Pergunta

  • Boa tarde pessoal, estou com uma dúvida
    não estou conseguindo fazer uma consulta através da view

    EX: tenho no meu Model uma entidade chamada Funcionario,
    com as seguintes propriedades: (Nome, CPF, RG, Local)

    como que eu faço para fazer uma function dentro do FuncionarioController, para pesquisar por uma das propriedades  ou por mais de uma ao mesmo tempo,

    sabendo que na View Index do Funcionarioe  vou ter 4 Html.TextBox para o usuário passar o valor,

    e como passar os dados  pela View Index do Funcionario para o funcionarioController?

    se alguém tiver um exemplo e puder me explicar agradeço.


    Oliveira

    terça-feira, 24 de julho de 2012 20:04

Respostas

  • o marcio fix exemplo aqui

    View

    @model IEnumerable<Ajax.Controllers.Funcionario>
    @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    <h2>Index</h2>
    @using (Html.BeginForm("pesquisa","Funcionarios"))
    {
            <input id="Text1" name="pesquisa" type="text" />  
            <input id="Submit1" type="submit" value="Pesquisar" />
    }
    <p>
        @Html.ActionLink("Create New", "Create")
    </p>
    <table>
        <tr>
            <th></th>
            <th>
                Nome
            </th>
            <th>
                Cpf
            </th>
            <th>
                RG
            </th>
            <th>
                Local
            </th>
        </tr>
    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
            </td>
            <td>
                @item.Nome
            </td>
            <td>
                @item.Cpf
            </td>
            <td>
                @item.RG
            </td>
            <td>
                @item.Local
            </td>
        </tr>
    }
    </table>

    o meu controller

    namespace Ajax.Controllers
    {
        public class FuncionariosController : Controller
        {
            //quando a pagina roda na primeira vez é listado todo funcionario
            public ActionResult Index()
            {
                Funcionario f = new Funcionario();
                var dados = from p in f.GetFuncionario() select p;
                return View(dados);
            }
            //Recupero o valor do textbox, que tem o name de pesquisa 
            [HttpPost]
            public ActionResult pesquisa(string pesquisa)
            {
                Funcionario f = new Funcionario();
                //Esse Metodo GetFuncionario() me retorna uma lista de funcionario.
                //Não estou ultilizando banco de dados por isso.
                var dados = from p in f.GetFuncionario()
                            where
                                p.Nome.Contains(pesquisa) ||
                                p.Cpf.Contains(pesquisa) ||
                                p.RG.Contains(pesquisa) ||
                                p.Local.Contains(pesquisa)
                            select p;
                //Retorno para minha view Index com os dados pesquisados
                return View("Index", dados);
            }
        }
    }

    o model

    namespace Ajax.Controllers
    {
        public class Funcionario
        {
            public string  Nome { get; set; }
            public string  Cpf { get; set; }
            public string RG { get; set; }
            public string Local { get; set; }
            public IList< Funcionario> GetFuncionario()
            {
                IList<Funcionario> Func = new List<Funcionario>
                {
                    new Funcionario{Nome="joao", Cpf="12312313",RG="sspsp11444",Local="Brasil"},
                    new Funcionario{Nome="pedro", Cpf="74878788",RG="sspsp18888",Local="Franca"},
                    new Funcionario{Nome="marcos", Cpf="21212121",RG="ssprj444453",Local="Londres"}
                };
                
                return Func;
            }
        }
    }

    olha se ajuda. Cuidado com nome do projeto que vai tar diferente do meu que é ajax. Dá uma estudada no meu exemplo.

    att.

    quarta-feira, 25 de julho de 2012 00:11
    Moderador
  • Marcio, boa tarde!!

    Aqui tem um exemplo como você precisa.

    Att,

    quarta-feira, 25 de julho de 2012 19:20

Todas as Respostas

  • O Marcio você poderia ser mais específico?

    Não consegui entender oque você precisa fazer.

    att.

    terça-feira, 24 de julho de 2012 22:18
    Moderador
  • Me desculpe Welington jr, se não fui muito claro, e que sou novo em ASP.Net MVC3, estou aprendendo ainda,

    mas minha idéia e a seguinte Welington jr.
    tem um exemplo neste link: http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net-mvc-application.

    neste exemplo tem uma pesquisa na opção estudante, onde filtra pelo nome,

    o que eu queria seria a mesma idéia, mas com mais campos de pesquisa além do nome, pesquisar também pelo CPF, RG, Local.

    Se tiver alguma idéia de como fazer, agradeço.

    Obrigado.


    Oliveira

    terça-feira, 24 de julho de 2012 22:35
  • o marcio fix exemplo aqui

    View

    @model IEnumerable<Ajax.Controllers.Funcionario>
    @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    <h2>Index</h2>
    @using (Html.BeginForm("pesquisa","Funcionarios"))
    {
            <input id="Text1" name="pesquisa" type="text" />  
            <input id="Submit1" type="submit" value="Pesquisar" />
    }
    <p>
        @Html.ActionLink("Create New", "Create")
    </p>
    <table>
        <tr>
            <th></th>
            <th>
                Nome
            </th>
            <th>
                Cpf
            </th>
            <th>
                RG
            </th>
            <th>
                Local
            </th>
        </tr>
    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
            </td>
            <td>
                @item.Nome
            </td>
            <td>
                @item.Cpf
            </td>
            <td>
                @item.RG
            </td>
            <td>
                @item.Local
            </td>
        </tr>
    }
    </table>

    o meu controller

    namespace Ajax.Controllers
    {
        public class FuncionariosController : Controller
        {
            //quando a pagina roda na primeira vez é listado todo funcionario
            public ActionResult Index()
            {
                Funcionario f = new Funcionario();
                var dados = from p in f.GetFuncionario() select p;
                return View(dados);
            }
            //Recupero o valor do textbox, que tem o name de pesquisa 
            [HttpPost]
            public ActionResult pesquisa(string pesquisa)
            {
                Funcionario f = new Funcionario();
                //Esse Metodo GetFuncionario() me retorna uma lista de funcionario.
                //Não estou ultilizando banco de dados por isso.
                var dados = from p in f.GetFuncionario()
                            where
                                p.Nome.Contains(pesquisa) ||
                                p.Cpf.Contains(pesquisa) ||
                                p.RG.Contains(pesquisa) ||
                                p.Local.Contains(pesquisa)
                            select p;
                //Retorno para minha view Index com os dados pesquisados
                return View("Index", dados);
            }
        }
    }

    o model

    namespace Ajax.Controllers
    {
        public class Funcionario
        {
            public string  Nome { get; set; }
            public string  Cpf { get; set; }
            public string RG { get; set; }
            public string Local { get; set; }
            public IList< Funcionario> GetFuncionario()
            {
                IList<Funcionario> Func = new List<Funcionario>
                {
                    new Funcionario{Nome="joao", Cpf="12312313",RG="sspsp11444",Local="Brasil"},
                    new Funcionario{Nome="pedro", Cpf="74878788",RG="sspsp18888",Local="Franca"},
                    new Funcionario{Nome="marcos", Cpf="21212121",RG="ssprj444453",Local="Londres"}
                };
                
                return Func;
            }
        }
    }

    olha se ajuda. Cuidado com nome do projeto que vai tar diferente do meu que é ajax. Dá uma estudada no meu exemplo.

    att.

    quarta-feira, 25 de julho de 2012 00:11
    Moderador
  • Valeu Welington jr  pela ajuda.

    vou dar uma olhada no exemplo que vc montou, e converter para vb.net.

    amanha eu retorno.

    Obrigado


    Oliveira

    quarta-feira, 25 de julho de 2012 00:54
  • View convertida para vb.net

    @ModelType IEnumerable(Of Models.Funcionario)
    
    @Code
        ViewData("Title") = "Index"
    End Code
    
    <h2>Index</h2>
    <p>Pesquisa por Nome | CPF | RG | Local</p>
    @Using Html.BeginForm("pesquisar", "Funcionario")
        @<input id="Text1" name="pesquisa" type="text" title="Pesquisar"/>  
        @<input id="Submit1" type="submit" value="Pesquisar" />
    End Using
     
       <p>
        @Html.ActionLink("Create New", "Create")
    </p>
    <table>
        <tr>
            <th>
                Nome
            </th>
            <th>
                Cpf
            </th>
            <th>
                RG
            </th>
            <th>
                Local
            </th>
            <th></th>
        </tr>
    
    @For Each item In Model
        Dim currentItem = item
        @<tr>
            <td>
                @Html.DisplayFor(Function(modelItem) currentItem.Nome)
            </td>
            <td>
                @Html.DisplayFor(Function(modelItem) currentItem.Cpf)
            </td>
            <td>
                @Html.DisplayFor(Function(modelItem) currentItem.RG)
            </td>
            <td>
                @Html.DisplayFor(Function(modelItem) currentItem.Local)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", New With {.id = currentItem.id}) |
                @Html.ActionLink("Details", "Details", New With {.id = currentItem.id}) |
                @Html.ActionLink("Delete", "Delete", New With {.id = currentItem.id})
            </td>
        </tr>
    Next
    
    </table>

    Controller

     Public Class FuncionarioController
            Inherits System.Web.Mvc.Controller
    
            Private db As Contexto = New Contexto
    
            '
            ' GET: /Funcionario/
    
            Function Index() As ViewResult
                Return View(db.Funcionarios.ToList())
            End Function
    
            Function Pesquisar(ByVal pesquisa As String) As ActionResult
                Dim f As New Funcionario()
                'Esse Metodo GetFuncionario() me retorna uma lista de funcionario.
                'Não estou ultilizando banco de dados por isso.
                Dim dados = From p In db.Funcionarios _
                            Where p.Nome.Contains(pesquisa) _
                            OrElse p.Cpf.Contains(pesquisa) _
                            OrElse p.RG.Contains(pesquisa) _
                            OrElse p.Local.Contains(pesquisa) _
                            Select p
                'Retorno para minha view Index com os dados pesquisados
                Return View("Index", dados)
            End Function
    End Class

    Model

    Imports System.ComponentModel.DataAnnotations
    
    Namespace Models
        <Table("Funcionario")>
        Public Class Funcionario
            <Key()>
            Public Property id As Integer
            Public Property Nome As String
            Public Property Cpf As String
            Public Property RG As String
            Public Property Local As String
    
    
        End Class
    End Namespace

    Show Welington jr, funcionou, converti o codigo C#  para VB.net, 

    obrigado, abraço.


    Oliveira

    quarta-feira, 25 de julho de 2012 02:00
  •  Welington jr

    Eu precisava que a tela de consulta, tivesse +- este padrão, com um botão ou menu de pesquisar abaixo da Tabela

    onde eu pudesse pesquisar pelo nome ou pelo setor ou pelo CPF,  ou nCampos de pesquisa

    obrigado. 


    Oliveira

    quarta-feira, 25 de julho de 2012 18:46
  • Marcio, boa tarde!!

    Aqui tem um exemplo como você precisa.

    Att,

    quarta-feira, 25 de julho de 2012 19:20
  • Boa tarde Samuel, obrigado pela dica,

    vou dar uma olhada.

    vlw


    Oliveira

    quarta-feira, 25 de julho de 2012 19:35
  • o Marcio só opinião minha, desse jeito parece que vai ficar estranho, daquele jeito que te passei, ele procura em Todos campos.

    Dá para ficar com esse layout e pesquisar só com um textbox.

    por que desse jeito vai ter que ser requisição via GET.

    quarta-feira, 25 de julho de 2012 22:02
    Moderador
  • Samuel, no exemplo que vc me passo e montado com WebGrid, no momento eu não vou trabalhar com este objeto

    mas foi valido o se exemplo, já me surgiu outras idéias

    vlw,

    obrigado.


    Oliveira

    quinta-feira, 26 de julho de 2012 04:05
  • Welington, vou seguir o exemplo inicial, mas com algumas modificações.

    e que na pesquisa eu preciso de campos especificos para filtrar

    o meu FuncionarioController:

    Function Pesquisar(ByVal _nome As String, ByVal _cpf As String, ByVal _rg As String, ByVal _local As String) As ActionResult
                Dim f As New Funcionario()
                'Esse Metodo GetFuncionario() me retorna uma lista de funcionario.
               
                Dim dados
    
                If Not String.IsNullOrEmpty(_nome) OrElse Not String.IsNullOrEmpty(_cpf) OrElse Not String.IsNullOrEmpty(_rg) OrElse Not String.IsNullOrEmpty(_local) Then
    
                    dados = From p In db.Funcionarios _
                          Where p.Nome.Equals(_nome) _
                          OrElse p.Cpf.Equals(_cpf) _
                          OrElse p.RG.Equals(_rg) _
                          OrElse p.Local.Equals(_local) _
                          Select p
                Else
                    dados = From p In db.Funcionarios _
                            Select p
                End If
    
              
                'Retorno para minha view Index com os dados pesquisados
                Return View("Index", dados)
            End Function

    Pessoal obrigado pela participação.

    Se tiverem algum comentário, fiquem a vontade,

    opiniões são sempre bem vindas.

    Valeu.


    Oliveira


    quinta-feira, 26 de julho de 2012 04:25