Jump to content

Archived

This topic is now archived and is closed to further replies.

WebMasterJr

[Resolvido] Retornar Se login existe ou nao em cadastro de Login

Recommended Posts

Bom Dia,

 

Estou com uma duvida em questao de fazer uma validação de login, onde a pessoa insere o Login em uma View ( esclarecendo que eu trabalho com ASP.NET MVC 3 usando Ajax e JQuery ) e com uma programação ja feita no C# para retornar "True" ou "False" e partir disso tratar uma resposta ao usuario.

 

Tenho que fazer isso na parte do HTML, abaixo esta o codigo HTML:

 

 @Html.LabelFor(model => model.Login):
       @Html.TextBoxFor(model => model.Login, new { @class = "validate[required]", maxlength = "30"})
       @Html.ValidationMessageFor(model => model.Login)
       <br />
       @Html.LabelFor(model => model.Senha):
       @Html.PasswordFor(model => model.Senha, new { @class = "validate[required]", maxlength = "30" })
       @Html.ValidationMessageFor(model => model.Senha)
       <br />
       @Html.LabelFor(model => model.ConfirmaSenha):
       @Html.PasswordFor(model => model.ConfirmaSenha, new { @class = "validate[required]", maxlength = "30" })
       @Html.ValidationMessageFor(model => model.ConfirmaSenha)

 

Onde é apenas os dados do usuario, e o tratamento terá que ser feito logo abaixo ou por alguma função, que é aonde que estou com duvida em como fazer, ja tentei uma função de "success" simples mais mesmo assim não deu certo. E abaixo esta a parte da verificação de login para ver se ele já existe no banco já cadastrado:

 

[HttpPut]
       public JsonResult UserIsAvaliable(string username)
       {
           using (ModelContainer mc = new ModelContainer())
           {
               int qtdUser = mc.Usuarios.Where(w => w.Login == username).Count();
               if (qtdUser == 0)
                   return Json(true);
               else
                   return Json(false);
           }
       }

 

Bom.. este é o meu problema, se alguém puder me ajudar agradeceria.

 

 

Obrigado

Share this post


Link to post
Share on other sites

Sim sim...

 

Irei de algum modo acessar o "UserIsAvaliable" por meio de alguma function...

 

Mais andei pesqueisando no Positon Absolute e no api.jquery, mais não encontrei nada, sem contar nas infinidades de forum....

 

Inclusive um aqui no iMaster mesmo só que era em PHP e nao era o problema que eu estou procurando.

Share this post


Link to post
Share on other sites

Bom acho que é isso, faz um teste ai:


public JsonResult UserIsAvaliable(string username)
       {
           using (ModelContainer mc = new ModelContainer())
           {
               int qtdUser = mc.Usuarios.Where(w => w.Login == username).Count();
               if (qtdUser == 0)
                   return Json(new { key = "Usuário não encontrado" }, JsonRequestBehavior.AllowGet);
               else
                   return Json(new { key = "Usuário encontrado" }, JsonRequestBehavior.AllowGet)
           }
       }

$("#username").change(function() {
               $.getJSON("/SeuControler/UserIsAvaliable", { username: $(this).val() }, function(json) {
                   alert(json);
               });
       });

 

Share this post


Link to post
Share on other sites

Meu caro amigo nao... Enquanto voce estava escrevendo o post creio eu, meu Boss falou que ele quer da seguinte forma:

 

Que o "UserIsAvaliable" retorne memso "true" ou "false" e que a partir disso eu faça o tratamento no HTML ou no JS, e que eu tbm chame isso de algum modo, nao sei se tem especificado mais estamos colocando um balão vermelho acima do campo para alguma resposta, assim se alguem nao preenche um campo exibe "Campo Obrigadorio" ate a pessoa preenche-lo.

 

Da mesma forma seria para o Usuario, caso já exista apresentar "Usuario Existente" e caso usuario não existir nao apresentar nada.

Share this post


Link to post
Share on other sites

Quanto a validações de campo obrigatório, segue 4 alternativas: http://www.asp.net/mvc/tutorials#Validation

Quanto a esse outro que você falou. pode utilizar o que eu passei, fazendo algumas adaptações.

Share this post


Link to post
Share on other sites

As validações estão todas feitas e funcionando perfeitamente...

 

Então a unica coisa que terei que fazer é adaptar o código que você me passou para que ele invés de exibir uma resposta que jé vem pronta do C# redirecionar ela para uma resposta que será tratada no HTML?

Share this post


Link to post
Share on other sites

Não consegui resolver esse problema, pois ja tentei de todas as forma que eu imaginei, esta dessa seguinte forma:

 

      $("#username").change(function () {
               url: "/Usuario/UserIsAvaliable", 
               $.(this).username.val();
               function (json) {
                   if (json = false)
                       alert("Usu&aacuterio Existente");
               });
           });

 

E não consegui retornar nenhum resulta em tela. Poderia me ajudar com algo?

Share this post


Link to post
Share on other sites

Erro basico de JS, em comparações de igual usa-se dois ==.

if (json == false)
                       alert("Usu&aacuterio Existente");

E muda de change para blur

$("#username").change para $("#username").blur

Share this post


Link to post
Share on other sites

Mesmo assim... ja tentei de varias formas.. tentei usando .focus(), .focusin() e .focusout(), e mesmo assim nao deu certo em nenhum... ja fiz a alteração com o .blur() e tbm nao deu certo.

 

Porque quando o cliente tirar o foco do campo Login ja tem que apresentar que o usuario existe... e isso da msn ta certo eu só tenho que fazer aparecer e tbm entrar no metodo dentro do C#.

 

E é exatamente isso que não esta acontecendo.

 

Ja nao sei mais o que eu faço.

Share this post


Link to post
Share on other sites

@model Esculapius_Web.Models.UsuarioCreate

@using Esculapius_Web.Models;
@using GeoCons.Extension;

@{
   ViewBag.Title = "Create";
   Layout = "~/Views/Shared/_LayoutSistema.cshtml";

   IDictionary<object, string> pessoa = new Dictionary<object, string>();
   IDictionary<object, string> tipospessoa = new Dictionary<object, string>();

   using (ModelContainer mc = new ModelContainer())
   {
       //Encontrar um solução melhor para isso,
       //pois aqui duas consultas são feitas no db
       IEnumerable<Pessoa> query = (from p in mc.Pessoas select p)
                             .Except(from p in mc.Pessoas
                             join u in mc.Usuarios on p equals u.Pessoa
                             select p);
       pessoa.Add("x", "Cadastrar Nova Pessoa");
       /*
       foreach (Pessoa p in query)
       {
           pessoas.Add(p.Id, p.Nome);
       }
       */
   }

   tipospessoa.Add("ps", "Profissional de Saúde");
   tipospessoa.Add("f", "Funcionario");
   tipospessoa.Add("p", "Paciente");

   //Lista de permições

   Dictionary<Type, string> areas = new Dictionary<Type, string>();
   areas.Add(typeof(Usuario), "Usuários");
   areas.Add(typeof(ProfSaude), "Profissionais de Saúde");
   areas.Add(typeof(Funcionario), "Funcionários");
   areas.Add(typeof(Paciente), "Pacientes");
   areas.Add(typeof(Fornecedor), "Fornecedores");
   areas.Add(typeof(Consulta), "Consultas Médicas");
   areas.Add(typeof(Atestado), "Atestados");
   areas.Add(typeof(Especialidade), "Especialidades");
   areas.Add(typeof(Cargo), "Cargos");
   areas.Add(typeof(Autenticacao), "Autenticações no sistema");
   areas.Add(typeof(Registro), "Registro de Operações");
   areas.Add(typeof(Convenio), "Convênio");
   areas.Add(typeof(Financeiro), "Financeiro");

   //ICollection<Permicao> permicoes = new List<Permicao>();
   //ViewData.Model.Operacoes = new List<Operacao>();

   foreach(KeyValuePair<Type, string> area in areas)
   {
       foreach(ComandoOperacao co in Enum.GetValues(typeof(ComandoOperacao)))
       {
           PermicaoSelecionada p = new PermicaoSelecionada()
           {
               Nome = area.Value,
               Classe = area.Key.Name.Split('_').Last(),
               Comando = co,
               Selecionado = false
           };

           Model.Permicoes.Add(p);
       }
   }
}

@section Styles{
   <link rel="stylesheet" type="text/css" href="@Url.Content("~/css/tri-state-checkbox.css")" />

   <style type="text/css">
       #permicoesAcesso tbody tr td.itemchecked
       {
           text-align: center;
       }
   </style>
}

@section Scripts{
   <script src="@Url.Content("~/Scripts/tri-state-checkbox/tristatecheck.js")" type="text/javascript"></script>
   <script type="text/javascript">
       $(function () {
           $("#permicoesAcesso>tbody>tr>td.triCheckbox>input[type='checkbox']").each(function () {
               $(this).tristate({
                   children: $("#permicoesAcesso>tbody>tr." + this.id + ">td.itemchecked>input[type='checkbox']"),
                   classes: { checkbox: "customcheck", checked: "customcheckfull", partial: "customcheckpartial", unchecked: "customchecknone" }
               });
           });
           function()({
               $.ajax({
                   $("#Login").focus(function () {
                       url: "/Usuario/IsUserIsAvaliable";
                       datatype: 'json';
                       error: function (msg) {alert('Deu erro!');}
                       success: function (json){
                          if (json == false)
                               alert('Login Existente');
                       }
                   });
               });
            });
       });
   </script>
}

<h2>Cadastro de Novo Usuário</h2>

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "form" })) {
   @Html.ValidationSummary(true)

   <fieldset>
       <legend>Dados do Usuário</legend>

       @Html.LabelFor(model => model.Login):
       @Html.TextBoxFor(model => model.Login, new { @class = "validate[required]", maxlength = "30"})
       @Html.ValidationMessageFor(model => model.Login)    
       <br />
       @Html.LabelFor(model => model.Senha):
       @Html.PasswordFor(model => model.Senha, new { @class = "validate[required]", maxlength = "30" })
       @Html.ValidationMessageFor(model => model.Senha)
       <br />
       @Html.LabelFor(model => model.ConfirmaSenha):
       @Html.PasswordFor(model => model.ConfirmaSenha, new { @class = "validate[required]", maxlength = "30" })
       @Html.ValidationMessageFor(model => model.ConfirmaSenha)
       <div id="nova_pessoa">
           @Html.LabelFor(model => model.TipoPessoa, "Tipo de Pessoa"):
           @Html.DropDownListFor(model => model.TipoPessoa, new SelectList(tipospessoa, "Key", "Value"), new { @class = "itemzero" })

           <br />
           @Html.EditorFor(model => model.Pessoa, "PessoaEditor", new ViewDataDictionary())
       </div>
       <br />
       <strong>@Html.LabelFor(model => model.Administrador)</strong>
       @Html.CheckBoxFor(model => model.Administrador)
       <br />
       <table id="permicoesAcesso" style="width: 510px">
           <caption>Permições de Acesso</caption>
           <thead>
               <tr>
                   <th>Área</th>
                   <th>Leitura</th>
                   <th>Inserção</th>
                   <th>Alteração</th>
                   <th>Exclusão</th>
               </tr>
           </thead>
           <tbody>
               @foreach (KeyValuePair<Type, string> area in areas)
               {
                   <tr class="Operacao_@(area.Key.Name.Split('_').Last())">
                       <td class="triCheckbox"><input type="checkbox" id="Operacao_@(area.Key.Name.Split('_').Last())" name="Operacao_@(area.Key.Name.Split('_').Last())" /><label for="Operacao_@(area.Key.Name.Split('_').Last())">@area.Value</label></td>
                       @foreach (PermicaoSelecionada op in ViewData.Model.Permicoes.Where(o => o.Classe == area.Key.Name))
                       {
                           <td class="itemchecked">
                               @{ Html.RenderPartial("ItemPermicaoSelecionada", op); }
                           </td>
                       }
                   </tr>
               }
           </tbody>
       </table>
       <input type="submit" class="jbutton" value="Criar!" />
   </fieldset>
}

<p>
   @Html.ActionLink("Retornar ao perfil", "Index", null, new { @class = "jbutton" })
</p>

 

Ai esta todo o codigo da pagina criando dinamicamente os campos de inserção de dados... E acima do metodo no C# esta [HttpPut] tentei colocar [Webethod] mais nao deu certo.

 

Ta osso demais... sei que é mais ainda pra voce porque axo que nao esta entendendo o que eu quero. Mais qualquer pergunta pode fazer.

 

E abaixo novamente o C#:

 

  [HttpPut]
       public JsonResult UserIsAvaliable(string username)
       {
           using (ModelContainer mc = new ModelContainer())
           {
               int qtdUser = mc.Usuarios.Where(w => w.Login == username).Count();
               if (qtdUser == 0)
                   return Json(true);
               else
                   return Json(false);
           }
       }

Share this post


Link to post
Share on other sites

WebMaster, olha só, no C#, no return tenta adicionar, JsonRequestBehavior.AllowGet, e remove o [HttpPut], nos dois return e testa.

return Json(true, , JsonRequestBehavior.AllowGet);

Share this post


Link to post
Share on other sites

olha só, achei mais um erro, seu metodo precisa do username para validar, e no JS você não esta passando o valor:

altera de:

 

function()({
               $.ajax({
                   $("#Login").focus(function () {
                       url: "/Usuario/IsUserIsAvaliable";
                       datatype: 'json';
                       error: function (msg) {alert('Deu erro!');}
                       success: function (json){
                      	if (json == false)
                               alert('Login Existente');
                       }
                   });
               });
        	});

para :

 

 

function()({
               $.ajax({
                   $("#Login").focus(function () {
                       url: "/Usuario/IsUserIsAvaliable";
		data: { username: $(this).val() },
		contentType: "application/json; charset=utf-8",
                       datatype: 'json';
                       error: function (msg) {alert('Deu erro!');}
                       success: function (json){
                      	if (json == false)
                               alert('Login Existente');
                       }
                   });
               });
        	});

Share this post


Link to post
Share on other sites

Meu amigo... nada...

 

To com uma baita dor de cabeça jah... e eu preciso terminar isso pra poder entregar o prototipo do projeto para o cliente... huauhauahauuhahauhaa...

 

Pensa na pressão... e eu estou APRENDENDO, ESTAGIANDO e ha 1 mes na empresa.... uhauhuaauaauauuau

 

 

Mas tentei de toda forma.

Share this post


Link to post
Share on other sites

Cara, você deve esta fazendo alguma coisinha errada. eu testei aqui localmente e funcionou de boa.

meu teste:

 

Controller

public class HomeController : Controller
{
public JsonResult UserIsAvaliable(string username)
       {
               if (username == "ivan")
                   return Json(true, JsonRequestBehavior.AllowGet);
               else
                   return Json(false, JsonRequestBehavior.AllowGet);
       }
}

View

$("#username").blur(function() {
               $.getJSON("/Home/UserIsAvaliable", { username: $(this).val() }, function(json) {
                   if (json == false)
                       alert("Usu&aacuterio Existente");
               });
       });
<input type="text" id="username" name="username" />

 

Share this post


Link to post
Share on other sites

Deixei o meu igual ao seu menos em questão de procura pois o meu esta procurando no banco, mais do resto deixei igual...

 

Nao apresenta nada... nem o alert nem nada do tipo, revi ate as virgulas e os pontos, e nada....

 

 

Minha cabeça parece que vai explodir... tenti com e sem o JesonRequestBehavior e com e sem o HttpPut....

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.