Array
(
)

Salvar dados de uma DownpDownList em uma ViewBag

Randrade
   - 09 jan 2015

Olá pessoa,
Possuo um DropDownList vindo de uma consulta. Necessito gravar o dado selecionado em uma ViewBag para utilizar em outro método.
O DropDown, vem desta viewbag:
#Código

            ViewBag.Contrato = usuarioRepository.Lista.Where(u => u.sLogin == autenticacaoProvider.UsuarioAutenticado.Login).Select(u => u.SqContrato);

Necessito que o valor escolhido, fique salvo em outra ViewBag, para utilizar em outro filtro.

Randrade
   - 09 jan 2015

Pesquisei aqui, e vi que posso salvar os dados em uma ViewModel, e utilizar as propriedades dela para fazer o que necessito.

Alguém teria algum exemplo de como salvar os dados em uma ViewModel?

0
|
0

Joel Rodrigues
   - 09 jan 2015

Aqui tem um link interessante sobre ViewModels, acho que vai lhe ajudar: ASP.Net MVC – View Model Pattern – Quando e como utilizar?

0
|
0

Randrade
   - 09 jan 2015

Joel, o link foi bastante útil.

Porém, necessito salvar um valor selecionado pelo usuário em um DropDownList, na ViewModel. E é nesta parte que estou com dificuldades.

O DropdownList é pupulado por essa ViewBag.

#Código

@Html.DropDownList("Contrato", new SelectList(ViewBag.Contrato, "Contrato"))


Teria alguma ideia de como eu possa fazer isso?

Eu sei que é uma coisa simples, isso que me deixa com mais raiva... kkkk

0
|
0

Randrade
   - 09 jan 2015

Consegui aqui.
Adicionei esses métodos aqui no meu controller, e funcionou.

#Código

public ActionResult Contrato()
        {      
            var contrato = new Usuario() { SqContrato = 0 };

            return View(contrato);
        }

        [HttpPost]
        public ActionResult Contrato(Int16? Contrato)
        {
                
           ViewBag.UserContrato = Contrato;

            return View();
        }


Só tenho um problema, essa "ViewBag.UserContrato" só é visível na view Contrato. Como faço para utilizar ela nas demais?

0
|
0

Joel Rodrigues
   - 12 jan 2015

Reveja como funciona a ViewBag. Se você está precisando persistir esse dado durante toda a aplicação, não é o caso de usar a ViewBag, pois ela funciona apenas para uma requisição e depois é apagada. Neste caso, acredito que você precise da Session.

0
|
0

Randrade
   - 12 jan 2015

Eu consegui fazer aqui já, só esqueci de postar a solução!

Criei uma Session onde eu consigo o valor selecionado, no lugar da ViewBag em meu controller:
#Código

System.Web.HttpContext.Current.Session["Contrato"] = Contrato;


Logo após criei um Helper para converter o valor da session e armazenar em uma variável.
#Código
 public static class SessionHelper
    {
        public static int Contrato
        {
            get {  return Convert.ToInt16(HttpContext.Current.Session["Contrato"]); }
            set { HttpContext.Current.Session["Contrato"] = value; }
        }
    }


E por fim, retorno o meu Helper como variável e adiciono ele na consulta:
#Código
 public ViewResult Ferias()
        {
            var contrato = SessionHelper.Contrato;

            var usuarios =
                funcionarioFeriasRepository.Lista.Where(r => r.slogin == autenticacaoProvider.UsuarioAutenticado.Login && r.SqContrato == contrato).OrderBy(u => u.DtInicioConcessao)
                    .ToList();

            return View(usuarios);
        }


Assim consigo armazenar e utilizar onde necessito.

0
|
0