none
Comparando string com membership RRS feed

  • Pergunta

  • Olá,

    Sou novo no asp.net e estou com uma duvida que não consegui resolver. Criei uma agenda, e nela salvo o "User" num campo UserId, do tipo string pois salva o UserName do usuário. Até ai tudo bem, porem na hora de chamar a agenda, ele lista todos os dados de todos os usuários, eu queria chamar só o dado do usuário logado, comparando o campo com o memebership. Ou seja, se o memebership for igual ao UserId mostra os dados se não for não mostra nada.  Não sei no que estou errando. Segue o código, se alguém puder me ajudar agraço desde já.

    public ActionResult ModuloAgenda(string UserId)
            {
                Agenda agenda = db.Agendas.Find(UserId);
                if (UserId ==Membership.FindUsersByName )
                {
                     return PartialView(db.Agendas.ToList());    
                }
                      return PartialView();
            }       

    quinta-feira, 26 de setembro de 2013 19:55

Respostas

  • Boa tarde,

    Para pegar o usuário logado você pode usar:

    User.Identity.Name

    Então seu codigo vai ficar assim:

    public ActionResult ModuloAgenda(string UserId)
    {
                Agenda agenda = db.Agendas.Find(UserId);
                if (UserId == User.Identity.Name)
                {
                     return PartialView(db.Agendas.ToList());    
                }
                      return PartialView();
    } 


    Fábio Alencar - MCP, MS, MCTS e MCSD

    • Sugerido como Resposta Fábio Alencar segunda-feira, 30 de setembro de 2013 12:23
    • Marcado como Resposta MRybeznski quinta-feira, 3 de outubro de 2013 19:06
    quinta-feira, 26 de setembro de 2013 20:19
  • O problema ocorre quando a lista está nula, então é só fazer uma validação antes do foreach.

    if (Model != null)
    {
    	foreach (var item in Model)
    	{ 
    		...
    	}
    }


    Fábio Alencar - MCP, MS, MCTS e MCSD

    • Sugerido como Resposta Fábio Alencar segunda-feira, 30 de setembro de 2013 12:23
    • Marcado como Resposta Giovani CrModerator segunda-feira, 30 de setembro de 2013 17:37
    quinta-feira, 26 de setembro de 2013 23:05

Todas as Respostas

  • Boa tarde,

    Para pegar o usuário logado você pode usar:

    User.Identity.Name

    Então seu codigo vai ficar assim:

    public ActionResult ModuloAgenda(string UserId)
    {
                Agenda agenda = db.Agendas.Find(UserId);
                if (UserId == User.Identity.Name)
                {
                     return PartialView(db.Agendas.ToList());    
                }
                      return PartialView();
    } 


    Fábio Alencar - MCP, MS, MCTS e MCSD

    • Sugerido como Resposta Fábio Alencar segunda-feira, 30 de setembro de 2013 12:23
    • Marcado como Resposta MRybeznski quinta-feira, 3 de outubro de 2013 19:06
    quinta-feira, 26 de setembro de 2013 20:19
  • Agora deu um erro no @foreach  (var item in Model) {  (Na View ModuloAgenda.cshtml)

    NullReferenceException não foi manipulada pelo código do usuário.
    Referência de objeto não definida para uma instância de um objeto

    Tem como eu colocar no código acima alguma variável para chamar a partialView sem conteúdo?

    pelo que entendi se não tiver nada cadastrado ele da Erro. É isso mesmo?

    Grato.



    • Editado MRybeznski quinta-feira, 26 de setembro de 2013 21:29
    quinta-feira, 26 de setembro de 2013 21:28
  • O problema ocorre quando a lista está nula, então é só fazer uma validação antes do foreach.

    if (Model != null)
    {
    	foreach (var item in Model)
    	{ 
    		...
    	}
    }


    Fábio Alencar - MCP, MS, MCTS e MCSD

    • Sugerido como Resposta Fábio Alencar segunda-feira, 30 de setembro de 2013 12:23
    • Marcado como Resposta Giovani CrModerator segunda-feira, 30 de setembro de 2013 17:37
    quinta-feira, 26 de setembro de 2013 23:05
  • Desculpe a demora,

    consegui, funcionou, porem ele não chama só os itens do userId, ele não mostra nada, eu até alterei para ver se conseguia:

     {
                     return PartialView(db.Agendas.ToList());    
                }
                      return PartialView();

    {
                    return PartialView(agenda.UserId);
                }
               return PartialView();

    porem acontece mesma coisa,  e se deixo só  return PartialView(); ele mostra todos, até os de outros userId.

    quinta-feira, 3 de outubro de 2013 19:10
  • Desculpe a demora,

    consegui, funcionou, porem ele não chama só os itens do userId, ele não mostra nada, eu até alterei para ver se conseguia:

     {
                     return PartialView(db.Agendas.ToList());    
                }
                      return PartialView();

    {
                    return PartialView(agenda.UserId);
                }
               return PartialView();

    porem acontece mesma coisa,  e se deixo só  return PartialView(); ele mostra todos, até os de outros userId.

    Se você fizer isso, vai trazer a agenda de todos os usuários?

    IList agendas = db.Agendas.ToList()
    Se sim, você vai ter que fazer um filtro para trazer só de um usuário específico.

    Fábio Alencar - MCP, MS, MCTS e MCSD

    quinta-feira, 3 de outubro de 2013 19:18
  • Eu achei que dava para fazer isso comparando o userId com o User.Identity.Name, já que o userId na tabela agenda guarda o Name no user.

    Você poderia me mostrar uma caminho de como fazer este filtro? grato.

    quinta-feira, 3 de outubro de 2013 20:11
  • Tente este filtro.

    IList agendas = db.Agendas.ToList().Where(x => x.userId == User.Identity.Name).ToList();


    Fábio Alencar - MCP, MS, MCTS e MCSD

    sexta-feira, 4 de outubro de 2013 16:27
  • return PartialView(db.Agendas.ToList().Where(a => (a.UserId == User.Identity.Name)));

    Foi direitinho assim.

    Obrigado a todos.

    quinta-feira, 12 de dezembro de 2013 19:04