none
Quando edito um item, o dropdownlist não exibe o valor do campo e aparece vazio. RRS feed

  • Pergunta

  • Bom dia amigos,

    Eu tenho um formulário de cadastro com textboxes e dropdownlists, e funciona perfeitamente.
    O problema é quando eu entro na tela de edição... os textboxes aparecem com as informações dos campos, MAS os dropdownlists aparecem vazios... como eu mantenho o valor cadastrado na hora de editar?

    Segue o código do controller e view: Lembrando que a classe EmpresaViewModel é utilizada para os formulários de criar novo item e de editar um item selecionado.

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

            //
            // GET: /Licenciada/Editar/2
            [Authorize]
            public ActionResult Editar(int id)
            {
                Empresa Empresa = EmpresaRepositorio.SelecionarEmpresa(id);
                if (User.Identity.Name == null)
                    return View("InvalidUser");
                return View(new EmpresaFormViewModel(Empresa));
            }
            //
            // POST: /Empresa/Editar/2
            [AcceptVerbs(HttpVerbs.Post), Authorize]
            public ActionResult Editar(int id, FormCollection collection)
            {
                Empresa Empresa = EmpresaRepositorio.SelecionarEmpresa(id);
                if (User.Identity.Name == null)
                    return View("InvalidUser");
                try
                {
                    UpdateModel(Empresa);
                    EmpresaRepositorio.Salvar();
                    return RedirectToAction("Detalhe", new { id = Empresa.cod_empresa });
                }
                catch
                {
                    ModelState.AddModelErrors(Empresa.GetRuleViolations());
                    return View(new EmpresaFormViewModel(Empresa));
                }
            }
    VIEW:

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<HeraSupport.Controllers.EmpresaFormViewModel>" %>
    
    <%= Html.ValidationSummary("Por favor, corrija os erros e tente novamente.")%>
    
        <% using (Html.BeginForm()) {%>
    
            <fieldset>
                <p>
                    <label for="nome">Nome:</label>
                    <%= Html.TextBox("nome", Model.empresas.nome)%>
                    <%= Html.ValidationMessage("nome", "*") %>
                </p>
                <p>
                    <label for="endereco">Endereco:</label>
                    <%= Html.TextBox("endereco", Model.empresas.endereco)%>
                    <%= Html.ValidationMessage("endereco", "*") %>
                </p>
                <p>
                    <label for="cod_tipo_contrato">Tipo de Contrato:</label>
                    <%= Html.DropDownList("cod_tipo_contrato", ViewData["cod_tipo_contrato"] as SelectList, "Selecione um tipo de contrato") %>                
                    <%= Html.ValidationMessage("cod_tipo_contrato", "*") %>
                </p>
                <p>
                    <label for="cod_licenciada">Empresa Licenciada:</label>
                    <%= Html.DropDownList("cod_licenciada", this.ViewData["cod_licenciada"] as SelectList, "Selecione uma empresa licenciada") %>                
                    <%= Html.ValidationMessage("cod_licenciada", "*") %>
                </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>
            
        <% } %>
    Obrigado
    quarta-feira, 2 de setembro de 2009 14:20

Respostas

  • faz essa verificação direto no EmpresaFormViewModel

    //não como ta sendo inicializado o Empresas.cod_tipo_contrato coloquei zero para exemplificar
    if(Empresas.cod_tipo_contrato == 0)
       cod_tipo_contrato = new SelectList(tipocontratorep.SelecionarTodos(),"cod_tipo_contrato", "descricao");
    else
       cod_tipo_contrato = new SelectList(tipocontratorep.SelecionarTodos(),"cod_tipo_contrato", "descricao",Empresas.cod_tipo_contrato);

    ____________________________________________________________
    Não esqueça de marcar o post como útil caso tenha te ajudado.
    • Marcado como Resposta joaoluizbt quarta-feira, 2 de setembro de 2009 16:28
    quarta-feira, 2 de setembro de 2009 15:01

Todas as Respostas

  • Olá joão, voce nao está setando o selectvalue do dropdownlist

    ex. <% =Html.DropDownList("idCategoriaSelecionada", new SelectList(Model.Categorias, "Id", "Nome", Model.CategoriaSelecionada.Id))%>
    ____________________________________________________________
    Não esqueça de marcar o post como útil caso tenha te ajudado.
    quarta-feira, 2 de setembro de 2009 14:25
  • Marco, obrigado pela rápida resposta...

    quando eu rodei o programa, deu o seguinte erro:

    DataBinding: 'System.Web.Mvc.SelectListItem' não contém uma propriedade com o nome 'cod_tipo_contrato'.

    As alterações que fiz no view foram estas:

                 <p>
                    <label for="cod_tipo_contrato">Tipo de Contrato:</label>
                    <%= Html.DropDownList("cod_tipo_contrato", new SelectList (this.Model.cod_tipo_contrato, "cod_tipo_contrato", "descricao", Model.TipoContrato.cod_tipo_contrato))%>                
                    <%= Html.ValidationMessage("cod_tipo_contrato", "*") %>
                </p>
                <p>
                    <label for="cod_licenciada">Empresa Licenciada:</label>
                    <%= Html.DropDownList("cod_licenciada", new SelectList (this.Model.cod_licenciada, "cod_licenciada", "nome", Model.Licenciada.cod_licenciada)) %>                
                    <%= Html.ValidationMessage("cod_licenciada", "*") %>
                </p>
    quarta-feira, 2 de setembro de 2009 14:41
  • faz essa verificação direto no EmpresaFormViewModel

    //não como ta sendo inicializado o Empresas.cod_tipo_contrato coloquei zero para exemplificar
    if(Empresas.cod_tipo_contrato == 0)
       cod_tipo_contrato = new SelectList(tipocontratorep.SelecionarTodos(),"cod_tipo_contrato", "descricao");
    else
       cod_tipo_contrato = new SelectList(tipocontratorep.SelecionarTodos(),"cod_tipo_contrato", "descricao",Empresas.cod_tipo_contrato);

    ____________________________________________________________
    Não esqueça de marcar o post como útil caso tenha te ajudado.
    • Marcado como Resposta joaoluizbt quarta-feira, 2 de setembro de 2009 16:28
    quarta-feira, 2 de setembro de 2009 15:01
  • Muito obrigado, meu caro amigo!

    Com este if eu resolvi o problema, voltei o HTML do jeito que estava antes, pois ele continuava dando o erro de databiding.

    Meus codigos do controller e view ficaram assim:

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

    VIEW:

                <p>
                    <label for="cod_tipo_contrato">Tipo de Contrato:</label>
                    <%= Html.DropDownList("cod_tipo_contrato", ViewData["cod_tipo_contrato"] as SelectList, "Selecione um tipo de contrato") %>                
                    <%= Html.ValidationMessage("cod_tipo_contrato", "*") %>
                </p>
                <p>
                    <label for="cod_licenciada">Empresa Licenciada:</label>
                    <%= Html.DropDownList("cod_licenciada", this.ViewData["cod_licenciada"] as SelectList, "Selecione uma empresa licenciada") %>                
                    <%= Html.ValidationMessage("cod_licenciada", "*") %>
                </p>

    Agora acho que posso caminhar um pouco mais aliviado implementando as outras telas que utilizam estes recursos.
    Muito obrigado, Marco.

    quarta-feira, 2 de setembro de 2009 16:28