none
Problemas para implementar um dorpdownlist no MVC RRS feed

  • Pergunta

  • Boa tarde a todos/as,

    Estou tentando pegar as informações da minha camada de modelos com a classe abaixo:

    //

     

    // View Classes Model
    public class EmpresaFormViewModel
    {
         // Properties
         public Empresa empresa { get; private set; }
         public SelectList tipoContrato { get; private set; }
         // Constructor
         public EmpresaFormViewModel(Empresa Empresa)
         {
              empresa = Empresa;
              tipoContrato =
    new SelectList(IEnumerable<TipoContrato>(empresa.cod_tipo_contrato));
              ViewData[
    "TipoContrato"] = tipoContrato;
         }
    }

    Mas o "IEnumerable" fica marcado de vermelho dizendo que "is a type, but is used like a variable".
    E o "ViewData" fica marcado de vermelho dizendo que "does not exist in the current context".

    Na minha camada view eu coloquei assim:
    <p>
         <label for="cod_tipo_contrato">Tipo de Contrato:</label>
         <%= Html.DropDownList("TipoContrato", this.ViewData["TipoContrato"] as SelectList, "Selecione um tipo de contrato") %>
         <%
    = Html.ValidationMessage("TipoContrato", "*") %>
    </p>

    Quando eu executo e tento adicionar, ele dá erro apontando para o selectlist com erro.
    Não sei como funciona e nem como implementa ele, por favor alguem pode me ajudar?
    preciso saber como funcionam o select list e o ienumerable para eu pegar as informações de uma tabela e usar no dropdownlist e depois gravar a informação selecionada no campo da outra tabela.

    Muito obrigado.

    quinta-feira, 27 de agosto de 2009 19:36

Respostas

  • ao meu ver o objeto tipocontratorep nao foi instanciado

    Marco Souza ________________________________________________________ Não esqueça de marcar o post como útil caso tenha te ajudado.
    • Marcado como Resposta joaoluizbt segunda-feira, 31 de agosto de 2009 16:57
    segunda-feira, 31 de agosto de 2009 13:58

Todas as Respostas

  • Por favor, amigos.

    Eu realmente preciso de ajuda aqui.
    Posso passar meu email se quiserem.

    Isto é para o meu trabalho, fazem tres dias que estou empacado por causa de um dropdownlist.

    Por favor, me ajudem.
    sexta-feira, 28 de agosto de 2009 12:35
  • Ola joao,
     usa o proprio SelectList que voce tem no seu FormViewModel
    this.Model.tipoContrato
    programação e banco de dados
    domingo, 30 de agosto de 2009 07:18
  • Olá João,

    Da uma olhada nesta dica http://www.danielfonsecacastro.com.br/post/2009/08/11/Dica-Html-Helper-DropDownList-e-ViewData.aspx

    Se a resposta for útil por favor não esqueça de marca.
    Abraços,
    Daniel Fonseca Castro
    www.danielfonsecacastro.com.br
    twitter
    domingo, 30 de agosto de 2009 11:20
  • Desta forma nao tenho nenhum erro de compilação, a tela de adicionar aparece, eu clico no botão adicionar, aí aparece a  seguinte mensagem de erro:

    Referência de objeto não definida para uma instância de um objeto.

    E marca de amarelo toda a linha:

         tiposContrato =
    new SelectList(tipocontratorep.SelecionarTodos());



    Eu tenho um arquivo de repositorio que faz a conexão com o datacontext e faz a seleção dos dados da tabela:

    Eu tentei seguir os exemplos que voces enviaram, mas nao deu certo, por favor, me ajudem...
    Não sei o que estou fazendo de errado.

    Muito obrigado.

    public

     

     

    class EmpresaRepositorio
    {
         private HeraSupportDataContext db = new HeraSupportDataContext();
         //
         // M‚todos de pesquisa
         public IQueryable<Empresa> SelecionarTodas()
         {
              return db.Empresas;
         }
    }

    Ou seja, com o método SelecionarTodas() eu pego todas as informações da tabela.

    em outro arquivo, o de controlle, eu crio uma classe para visualização do modelo e retornar para a camada view os dados coletados do repositório. eu crio uma variavel do tipo repositorio e outra do tipo lista, no construtor eu preencho a lista com o metodo de selecionar todos do objeto de repositorio. isto está correto?

    namespace

     

     

    HeraSupport.Controllers
    {
         //
         // View Classes Model
         public class EmpresaFormViewModel
         {
              // Properties
              public Empresa empresas { get; private set; }
              public TipoContratoRepositorio tipocontratorep;
              public LicenciadaRepositorio licenciadarep;
              public SelectList tiposContrato { get; private set; }
              public SelectList licenciadas { get; private set; }
              // Constructor
              public EmpresaFormViewModel(Empresa Empresas)
              {
                   empresas = Empresas;
                   tiposContrato =
    new SelectList(tipocontratorep.SelecionarTodos());
                   licenciadas =
    new SelectList(licenciadarep.SelecionarTodas());
              }
              //
              // Controller Class
              public class EmpresaController : Controller
              {
                   EmpresaRepositorio EmpresaRepositorio = new EmpresaRepositorio();
                   //
                   // GET: /Empresa/Adicionar
                   [Authorize]
                   public ActionResult Adicionar()
                   {
                        Empresa Empresa = new Empresa();
                        if (User.Identity.Name == null)
                             return View("InvalidUser");
                        return View(new EmpresaFormViewModel(Empresa));
                   }
                   //
                   // POST: /Empresa/Adicionar
                   [AcceptVerbs(HttpVerbs.Post), Authorize]
                   public ActionResult Adicionar(Empresa Empresa)
                   {
                       if (User.Identity.Name == null)
                            return View("InvalidUser");
                      {
                           try
                           {
                               
    EmpresaRepositorio.Adicionar(Empresa);
                                EmpresaRepositorio.Salvar();
                               
    return RedirectToAction("Detalhe", new { id = Empresa.cod_empresa });
                           }
                          
    catch
                          
    {
                                ModelState.AddModelErrors(Empresa.GetRuleViolations());
                               
    return View(new EmpresaFormViewModel(Empresa));
                            }
                       }
                   }
              }
         }
    }

    E o view está da seguinte forma:

    <%
    @ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<HeraSupport.Controllers.FormViewModel>" %>
    <%
    = Html.ValidationSummary("Por favor, corrija os erros e tente novamente.")%>
    <%
    using (Html.BeginForm()) {%>
         <fieldset>
              <
    p>
                   <label for="cod_tipo_contrato">Tipo de Contrato:</label>
                   <%= Html.DropDownList("tiposContrato", this.ViewData["tiposContrato"] as SelectList, "Selecione um tipo de contrato") %>
                   <%
    = Html.ValidationMessage("TipoContrato", "*") %>
              </p>
              <p>
                   <label for="cod_licenciada">Empresa Licenciada:</label>
                   <%= Html.DropDownList("licenciadas", this.ViewData["licenciadas"] as SelectList, "Selecione uma empresa licenciada") %>
                   <%
    = Html.ValidationMessage("licenciadas", "*") %>
              </p>
              <div>
                   <a href="/empresa"><img src="../../Content/img/voltar.jpg" alt="Voltar às empresas" class="image" /></a>
                   <input type="image" src="../../Content/img/salvar.jpg" alt="Salvar" class="image"/>
              </div>
         </fieldset>
    <% } %>
    segunda-feira, 31 de agosto de 2009 13:29
  • ao meu ver o objeto tipocontratorep nao foi instanciado

    Marco Souza ________________________________________________________ Não esqueça de marcar o post como útil caso tenha te ajudado.
    • Marcado como Resposta joaoluizbt segunda-feira, 31 de agosto de 2009 16:57
    segunda-feira, 31 de agosto de 2009 13:58
  • Blz, marco.

    Eu entro na tela para adicionar, seleciono as opções direitinho, mas quando vou salvar ele continua na tela, e quando eu volto para verificar a listagem das empresas cadastradas, nao aparece nenhuma, parece que não está salvando...

    Agora a tela de adicionar empresa está aparecendo com estas alterações, porém nao consigo salvar.

    //

     

    // View Classes Model
    public class EmpresaFormViewModel
    {
         // Properties
        
    public Empresa empresas { get; private set; }
        
    public TipoContratoRepositorio tipocontratorep = new TipoContratoRepositorio();
        
    public LicenciadaRepositorio licenciadarep = new LicenciadaRepositorio();
        
    public SelectList tiposContrato { get; private set; }
        
    public SelectList licenciadas { get; private set; }
        
    // Constructor
        
    public EmpresaFormViewModel(Empresa Empresas)
        
    {
             
    empresas = Empresas;
             
    tiposContrato = new SelectList(tipocontratorep.SelecionarTodos(),"cod_tipo_contrato", "descricao");
             
    licenciadas = new SelectList(licenciadarep.SelecionarTodas(), "cod_licenciada", "nome");
        
    }
    }

    segunda-feira, 31 de agosto de 2009 16:41