Array
(
)

Dúvida com criação de view?

Crist
   - 07 abr 2015

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

#Código


@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>

#Código

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



#Código

@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>

Joel Rodrigues
   - 07 abr 2015

Você poderia dizer o que está acontecendo?

Crist
   - 07 abr 2015

Explicando
No meu Index, eu tenho uma função para enviar dois parâmetros:
#Código

        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:

#Código
    public ActionResult ListaCliente(string recebeNome, int recebeOpcao)


então, eu deveria ser redirecionado para :

#Código
@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!

Crist
   - 07 abr 2015

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

index

#Código

@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

#Código

        [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();

        }

Joel Rodrigues
   - 07 abr 2015

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.

Randrade
   - 07 abr 2015

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.

Crist
   - 07 abr 2015

Amigo,
A minha dúvida “Apos algumas pesquisas, fiz uma alteração do código, agora preciso saber como enviar os parâmetros.”
Quais parâmetros?
#Código

        public ActionResult Index(string txtPesquisa, string recebeOpcao)


Agradeço a sua resposta, mais agora eu já consigo entender que é possível enviar qualquer parâmetro da view para o controller apenas usando a propriedade “name” de um HTML de forma muito simples, desta forma eu não vou precisar usar o @htmlHelper para algumas situações que é uma grande vantagem para mim, pois posso construir toda a interface usando o Bootstrap é apenas enviar o “name” para o controller.
Veja que eu alterei o meu Index

#Código
   <fieldset data-role="controlgroup">

        <input type="radio" name="recebeOpcao" id="radio-choice-v-2a" value="1" checked>
        <label for="radio-choice-v-2a">Seu Nome</label>
        <input type="radio" name="recebeOpcao" id="radio-choice-v-2b" value="2">
        <label for="radio-choice-v-2b">Nome do Pai</label>
        <input type="radio" name="recebeOpcao" 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="txtPesquisa" id="pesquisa" placeholder="buscar registro...">
    </fieldset>


Basta fazer isso usando o mesmo nome é pronto, os parâmetros vão ser enviados
#Código
        [HttpPost]
        public ActionResult Index(string txtPesquisa, string recebeOpcao)


Simples assim! Mais foi 2 dias estudando isso.

Randrade
   - 07 abr 2015

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.