07/04/2015

Dúvida com criação de view?

Estou criando uma view para receber os resultados de uma consulta, mais não estou conseguindo, alguém poderia me dizer o que estou fazendo de errado?
Agradeço



@model List<SistemaMobile.Models.cliente>

@{
    ViewBag.Title = "";
}


<script>
    function Selecionar()
    {
        var opcao1 = document.getElementById('radio-choice-v-2a').checked;
        var opcao2 = document.getElementById('radio-choice-v-2b').checked;
        var opcao3 = document.getElementById('radio-choice-v-2c').checked;
        var txtPesquisa = document.getElementById('pesquisa').value;
        var Resposta

       
        if (opcao1 != false) {
            Resposta = 1
           // alert("selecionou a opção " + Resposta);

        }

        if (opcao2 != false) {
            Resposta = 2
            // alert("selecionou a opção " + Resposta);

        }

        if (opcao3 != false) {
            Resposta = 3
           // alert("selecionou a opção " + Resposta);

        }


        if (txtPesquisa != null) {
            // alert("enviando os parametros");
            if (Resposta > 0) {
                $.post("/ConsultaCliente/ListaCliente", { recebeNome: txtPesquisa, recebeOpcao: Resposta }).done(function (data) {
                   // window.location.reload();
                    
                })
            }
        }
        else {
            alert("Adicionar um texto para pesquisa!")
        }

       
    }
</script>

<form >
    <fieldset data-role="controlgroup">
        <legend>Opção:</legend>
        <input type="radio"  name="radio-choice-v-2" id="radio-choice-v-2a"  value="1"  >
        <label for="radio-choice-v-2a">Seu Nome</label>
      
         <input type="radio" name="radio-choice-v-2" id="radio-choice-v-2b"  value="2"  >
        <label for="radio-choice-v-2b">Nome do Pai</label>
       
         <input type="radio"  name="radio-choice-v-2" id="radio-choice-v-2c" value="3"  >
        <label for="radio-choice-v-2c">Nome da Mãe</label>

    </fieldset>

    <fieldset>
        <label for="search">Localizar:</label>
        <input type="search" name="search1" id="pesquisa" placeholder="buscar registro...">
    </fieldset>

     <input id="enviar" type="submit" value="Localizar" onclick="Selecionar()"  data-icon="grid" data-iconpos="right"  data-theme="e">

</form>



        public ActionResult Index()
        {
            return View();
           
        }


        public ActionResult ListaCliente(string recebeNome, int recebeOpcao)
        {
            try
            {
                sistema_mobileEntities dao = new sistema_mobileEntities();
                IQueryable<cliente> sql;
                sql = null;


                if (recebeOpcao == 1)
                {
                    //link to sql não tem like
                    sql = from c in dao.cliente
                          where c.nome.StartsWith(recebeNome.Trim())
                          // where SqlMethods.Like(c.nome, recebeNome.Trim() + "%")
                          select c;

                    TempData["opcao1"] = "nome";
                }

                if (recebeOpcao == 2)
                {
                    sql = from c in dao.cliente
                          where c.pai.StartsWith(recebeNome.Trim())
                          select c;

                    TempData["opcao2"] = "pai";
                }

                if (recebeOpcao == 3)
                {
                    sql = from c in dao.cliente
                          where c.mae.StartsWith(recebeNome.Trim())
                          select c;

                    TempData["opcao3"] = "mae";
                }

                //return View(sql.ToList());
                return View(dao.cliente.ToList());
            }
            catch (Exception ex)
            {
                return Json("Erro ao consultar usuario" + ex.Message);
            }
  
        }





@model List<SistemaMobile.Models.cliente>

@{
    ViewBag.Title = "ListaCliente";
}


<form class="ui-filterable">
    <input id="rich-autocomplete-input" data-type="search" placeholder="Buscar um texto...">
</form>
<ul data-role="listview" data-filter="true" data-inset="true" data-input="#rich-autocomplete-input">
  
      @foreach (var item in Model)
      {
         <li data-filtertext="@Html.DisplayFor(c => item.nome)"> 
         <a href="@Url.Action("AtualizaCliente", "ConsultaCliente",  new { id = item.idcliente})"></a></li>
               
      }
</ul>

Crist

Respostas

07/04/2015

Joel Rodrigues

Você poderia dizer o que está acontecendo?
Responder Citar

07/04/2015

Crist

Explicando
No meu Index, eu tenho uma função para enviar dois parâmetros:
        if (txtPesquisa != null) {
            // alert("enviando os parametros");
            if (Resposta > 0) {
                $.post("/ConsultaCliente/ListaCliente", { recebeNome: txtPesquisa, recebeOpcao: Resposta }).done(function (data) {
                   // window.location.reload();
                     
                })
            }
        }
        else {
            alert("Adicionar um texto para pesquisa!")
        }


No meu controller eu recebe estes parâmetros para fazer uma consulta:

    public ActionResult ListaCliente(string recebeNome, int recebeOpcao)




então, eu deveria ser redirecionado para :

@model List<SistemaMobile.Models.cliente>
 
@{
    ViewBag.Title = "ListaCliente";
}



Mais estou ficando na mesma página da consulta, preciso entender o porque ocorre isso.
Agradeço se puder ajudar!
Responder Citar

07/04/2015

Crist

Apos algumas pesquisas, fiz uma alteração do código, agora preciso saber como enviar os parâmetros.

index

@model List<SistemaMobile.Models.cliente>

@{
    ViewBag.Title = "";
}


@using (Html.BeginForm())
{
   <fieldset data-role="controlgroup">

      <input type="radio"  name="@Html.RadioButton("nome", "Nome", true)" id="radio-choice-v-2a"  value="1"  >
      <label for="radio-choice-v-2a">Seu Nome</label>
      <input type="radio"  name="@Html.RadioButton("pai", "Pai", true)" id="radio-choice-v-2b"  value="1"  >
      <label for="radio-choice-v-2b">Nome do Pai</label>
      <input type="radio"  name="@Html.RadioButton("mae", "Mae", true)" id="radio-choice-v-2c"  value="1"  >
      <label for="radio-choice-v-2c">Nome da Mãe</label>
         
   </fieldset> 
    
    <fieldset>
        <label for="search">Localizar:</label>
        <input type="search" name="search1" id="pesquisa" placeholder="buscar registro...">
    </fieldset>

     <input id="enviar" type="submit" value="Localizar"  data-icon="grid" data-iconpos="right"  data-theme="e">
 
}

 <p>@TempData["titulo1"]</p>       

  <ul data-role="listview" data-autodividers="true" data-inset="true" data-theme="e">

      @if (Model.Count() > 0)
      {
         foreach (var item in Model)
          {
            <li><a href="@Url.Action("AtualizaCliente", "ConsultaCliente", new { id = item.idcliente })">@Html.DisplayFor(c => item.nome) </a></li> 
           }
      }
      else
      {
        <label>Você não tem dados cadastrados.</label>
      }
  </ul>


controller


        [HttpPost]
        public ActionResult Index(string recebeNome, int recebeOpcao)
        {
            try
            {
                sistema_mobileEntities dao = new sistema_mobileEntities();
                IQueryable<cliente> sql;
                sql = null;

                if (recebeOpcao == 1)
                {
                    sql = from c in dao.cliente
                          where c.nome.StartsWith(recebeNome.Trim())
                          select c;
                    TempData["opcao1"] = "nome";
                }
                return View(sql.ToList());

            }
            catch (Exception ex)
            {
                 TempData["Erro"] = "Erro na gravação dos dados " + ex.Message;
            }

            return View();

        }
Responder Citar

07/04/2015

Joel Rodrigues

Olá.
Quando você faz a submissão de dados via Ajax, você não é redirecionado para a outra página (é pra isso que serve o Ajax).
Se você quer que o usuário submeta um formulário de pesquisa, pode manter a estrutura do controller e no form ter os inputs com o mesmo nome dos parâmetros que serão enviados. É importante também que o form esteja apontando para a Action que receberá os argumentos da pesquisa.
Responder Citar

07/04/2015

Randrade

Não sei se é a mesma pessoa desta pergunta, mas se a intenção é apenas fazer uma busca com os parâmetros recuperados pela View, não há necessidade de utilizar nenhum script, você consegue realizar tudo com a View e o Controller mesmo. A não ser se for um requisito.
Porém, eu não consegui entender direito sua dúvida. Caso não tenha achado a resposta ainda, explique seu problema, que ficarei feliz em ajudar.
Responder Citar

07/04/2015

Randrade

Fico feliz que minha resposta lhe ajudou. Porém você está fazendo uma pequena confusão ainda.
Você pode utilizar Helpers, que eu particularmente aconselho. Você pode adicionar eles na classe do Bootstrap, sem problemas, praticamente da mesma forma.

O problema que você estava tendo, é que ao pesquisar (e muito, pelo sinal), você encontrou três formas diferentes de passar os dados para o Controller. Cada uma dessas formas funcionam perfeitamente. Porém você estava utilizando as três da mesma forma. E isso que estava sendo o problema.

Mas isso acontece, e é normal.


Apenas deixando uma obs, na forma que você está utilizando:

Se você deixar o Controller desta forma, se o usuário não selecionar nenhum RadioButton, você terá um erro em seu sistema. Ou você adiciona o parâmetro podendo receber null, ou você adiciona uma rota para isso, em seu RouteConfig.
Responder Citar