Definição de Chave Primária. ASP.NET MVC - CSharp

19/08/2015

0

Boa tarde pessoal,

estou com um problema que não consigo visualizar a solução.
Tenho a tabela chamada EMPRESACONVENIADA e ela tem a relação com a tabela UF
ou seja: uma empresa conveniada possui uma UF.

Vejam meu código:

[code]using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Exodo.Dominio
{

   public class EmpresaConveniada
    {
       [Required]
       [Key]
        public int idEmpresaConveniada { get; set; }

       [Required(ErrorMessage="Informe o nome do convênio")]
       [StringLength(150, ErrorMessage="Nome do convênio possui limite de 150 caracteres")]
       [Display(Name="Convênio")]
        public string nmconvenio { get; set; }

       [Required(ErrorMessage="Informe a Razão Social da Empresa Conveniada")]
       [StringLength(150, ErrorMessage="Razão Social da Empresa Conveniada Possui Limite de 150 Caracteres")]
       [Display(Name = "Razão Social")]
       public string rzsocial { get; set; }

       [Required(ErrorMessage="Informe o Nome Fantasia da Empresa Conveniada")]
       [StringLength(100, ErrorMessage="Nome Fantasia Possui Limite de 100 Caracteres")]
       [Display(Name = "Nome Fantasia")]
       public string nmfantasia { get; set; }

       [Required(ErrorMessage="Informe o C.N.P.J. da Empresa Conveniada")]
       [StringLength(20, ErrorMessage="CNPJ Possui Limite de 20 Caracteres")]
       [Display(Name = "C.N.P.J.")]
       public string nucnpj { get; set; }

       [Required(ErrorMessage="Informe a Inscrição Estadual da Empresa Conveniada")]
       [StringLength(20, ErrorMessage = "O campo Inscrição Estadual possui o limite de 20 caracteres")]
       [Display(Name = "Inscrição Estadual")]
       public string nuinscestadual { get; set; }

       [StringLength(15, ErrorMessage="Inscrição Municipal da Empresa Conveniada Possui Limite de 15 Caracteres")]
       [Display(Name = "Inscrição Muncipal")]
        public string nuinscmunicipal { get; set; }

       [Display(Name = "Endereço")]
       [StringLength(200, ErrorMessage = "O campo endereço possui o limite de 200 caracteres")]
       [Required(ErrorMessage = "Endereço do estabelecimento é obrigatório")]
       public string dsendereco { get; set; }

       [Display(Name = "Número")]
       [StringLength(10, ErrorMessage = "O campo número do endereço possui limite de 10 caracteres")]
       [Required(ErrorMessage = "O número do endereço é obrigatório")]
       public string nuendereco { get; set; }

       [Display(Name = "Complemento")]
       [StringLength(10, ErrorMessage="O campo Complemento possui limite de 10 caracteres")]
       public string dscomplemento { get; set; }

       [Display(Name = "CEP")]
       [StringLength(12, ErrorMessage = "O campo CEP possui limite de 12 caracteres")]
       [Required(ErrorMessage = "O CEP é obrigatório")]
       public string nucep { get; set; }

       [Display(Name = "Bairro")]
       [StringLength(120, ErrorMessage = "O campo Bairro possui limite de 120 caracteres")]
       [Required(ErrorMessage = "O Bairro é obrigatório")]
       public string nmbairro { get; set; }

       [Display(Name = "Cidade")]
       [StringLength(120, ErrorMessage = "O campo Cidade possui limite de 120 caracteres")]
       [Required(ErrorMessage = "Cidade é obrigatório")]
       public string nmcidade { get; set; }

       [Display(Name = "Fone")]
       [StringLength(15, ErrorMessage = "O campo Fone da Empresa Conveniada possui o limite de 15 caracteres")]
       public string nufone { get; set; }

       [Display(Name = "Celular")]
       [StringLength(15, ErrorMessage = "O campo Celular da Empresa Conveniada possui o limite de 15 caracteres")]
       public string nucelular { get; set; }

       [Display(Name = "e-mail")]
       [StringLength(150, ErrorMessage = "O campo e-mail da Empresa Conveniada possui o limite de 150 caracteres")]
       public string email { get; set; }

       [Display(Name = "Observação")]
       [StringLength(300, ErrorMessage = "O Campo Observação possui limite de 300 caracteres")]
       public string dsobservacao { get; set; }

       [Display(Name = "Data Cadastro")]
       [DataType(DataType.Date)]
       [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]
       public DateTime dtCadastro { get; set; }



       [Display(Name = "Nome Contato")]
       [StringLength(20, ErrorMessage = "O campo Nome Contato possui o limite de 20 caracteres")]
       [Required(ErrorMessage = "Nome do Contato é obrigatório")]
       public string nmcontato { get; set; }

       [Display(Name = "Fone Contato")]
       [StringLength(15, ErrorMessage = "O campo Fone do Contato possui o limite de 15 caracteres")]
       [Required(ErrorMessage = "Fone do Contato é obrigatório")]
       public string nufonecontato { get; set; }

       [Display(Name = "Celular Contato")]
       [StringLength(15, ErrorMessage = "O campo Celular do Contato possui o limite de 15 caracteres")]
       [Required(ErrorMessage = "Número do Celular do Contato é obrigatório")]
       public string nucelularcontato { get; set; }

       [Display(Name = "e-mail Contato")]
       [StringLength(150, ErrorMessage = "O campo e-mail do Contato possui o limite de 150 caracteres")]
       [Required(ErrorMessage = "O campo e-mail do contato é obrigatório")]
       public string emailcontato { get; set; }
       
       [Display(Name="Data Inclusão")]
       [DataType(DataType.Date)]
       [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")] 
       public DateTime dtinclusao { get; set; }

       [Display(Name="Data Alteração")]
       [DataType(DataType.Date)]
       [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]
       public DateTime dtalteracao { get; set; }

       [Display(Name="Usuário Inclusão")]
       public string usuinclusao { get; set; }

       [Display(Name="Usuário Alteração")]
       public string usualteracao { get; set; }

       [Display(Name = "U.F.")]
       public virtual Uf Uf { get; set; }

       public int idUF;






       
    }
}
[/code]


E a minha classe UF:

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace Exodo.Dominio
{
    public class Uf
    {
        [Required(ErrorMessage="Id da UF é obrigatório")]
        [Key]
        [Display(Name="Id")]
        public int IdUf { get; set; }
        
        [Required(ErrorMessage="Campo obrigatório")]
        [StringLength(100, ErrorMessage="Tamanho Maximo para o campo nome da UF: 100 caracteres")]
        [Display(Name="Descrição")]
        public string nmuf { get; set; }

        [Required(ErrorMessage="Campo obrigatório")]
        [StringLength(2, ErrorMessage="Tamanho do campo sigla: 2 caracteres")]
        [Display(Name="Sigla")]
        public string sguf { get; set; }

        public virtual IEnumerable<EmpresaConveniada> empresasConveniadas { get; set; }




    }
}




Meu Controller:

[code]
using System;
using System.Linq;
using System.Web.Mvc;
using DevExpress.Web.Mvc;

using Exodo.Aplicacao;
using Exodo.Dominio;

namespace Exodo.Controllers
{
    public class EmpresaConveniadaController : Controller
    {
       
        public readonly EmpresaConveniadaAplicacao appConvenio;
        public readonly UfAplicacao appUf;
        

        public EmpresaConveniadaController()
        {
         appConvenio = EmpresaConveniadaConstrutor.EmpConvAplicacao();
         appUf = UfAplicacaoContrutor.UfAplicacaoEF();
        }


        public ActionResult Index()
        {
            var listaEmpresaConveniada = appConvenio.listarTodos();

            return View(listaEmpresaConveniada);
        }

        public ActionResult Adicionar()
        {
          var todasUfs = appUf.listarTodos();
          ViewBag.UfId = new SelectList(todasUfs, "IDUF", "SGUF");


          return View();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Adicionar(EmpresaConveniada empConv)
        {
            if (empConv.idUF == null || empConv.idUF == 0)
            {
                ModelState.AddModelError("UF", "Informe a unidade federativa da empresa conveniada.");
            }

           if (ModelState.IsValid)
            {
                appConvenio.salvar(empConv);
                return RedirectToAction("Index");
            }
              var todasUfs = appUf.listarTodos();
              ViewBag.IdUf = new SelectList(todasUfs, "IDUF", "SGUF");

            return View(empConv);
        }


        public ActionResult Editar()
        {
            return View();
        }








       Exodo.Repositorio.Contexto db = new Exodo.Repositorio.Contexto();

        [ValidateInput(false)]
        public ActionResult GridViewPartial()
        {
            var model = db.Conveniadas;
            return PartialView("_GridViewPartial", model.ToList());
        }

        [HttpPost, ValidateInput(false)]
        public ActionResult GridViewPartialAddNew([ModelBinder(typeof(DevExpressEditorsBinder))] Exodo.Dominio.EmpresaConveniada item)
        {
            var model = db.Conveniadas;
            if (ModelState.IsValid)
            {
                try
                {
                    model.Add(item);
                    db.SaveChanges();
                }
                catch (Exception e)
                {
                    ViewData["EditError"] = e.Message;
                }
            }
            else
                ViewData["EditError"] = "Please, correct all errors.";
            return PartialView("_GridViewPartial", model.ToList());
        }
        [HttpPost, ValidateInput(false)]
        public ActionResult GridViewPartialUpdate([ModelBinder(typeof(DevExpressEditorsBinder))] Exodo.Dominio.EmpresaConveniada item)
        {
            var model = db.Conveniadas;
            if (ModelState.IsValid)
            {
                try
                {
                    var modelItem = model.FirstOrDefault(it => it.idEmpresaConveniada == item.idEmpresaConveniada);
                    if (modelItem != null)
                    {
                        this.UpdateModel(modelItem);
                        db.SaveChanges();
                    }
                }
                catch (Exception e)
                {
                    ViewData["EditError"] = e.Message;
                }
            }
            else
                ViewData["EditError"] = "Please, correct all errors.";
            return PartialView("_GridViewPartial", model.ToList());
        }
        [HttpPost, ValidateInput(false)]
        public ActionResult GridViewPartialDelete(System.Int32 idEmpresaConveniada)
        {
            var model = db.Conveniadas;
            if (idEmpresaConveniada >= 0)
            {
                try
                {
                    var item = model.FirstOrDefault(it => it.idEmpresaConveniada == idEmpresaConveniada);
                    if (item != null)
                        model.Remove(item);
                    db.SaveChanges();
                }
                catch (Exception e)
                {
                    ViewData["EditError"] = e.Message;
                }
            }
            return PartialView("_GridViewPartial", model.ToList());
        }

        public ActionResult cbxUfPartial()
        {
            return PartialView("_cbxUfPartial");
        }
    }
}



Repositório:

using System.Data.Entity;
using System.Collections.Generic;
using System.Linq;
using Exodo.Dominio;


namespace Exodo.Repositorio
{
    public class EmpresaConveniadaRepositorio:IRepositorio<EmpresaConveniada>
    {

        private readonly Contexto contexto;

        public EmpresaConveniadaRepositorio()
        {
         contexto = new Contexto();
        }


        public void salvar(EmpresaConveniada entidade)
        {
            if (entidade.idEmpresaConveniada > 0)
            {
                var convenioAlterar = contexto.Conveniadas.First(x => x.idEmpresaConveniada == entidade.idEmpresaConveniada);
                convenioAlterar.nmconvenio      = entidade.nmconvenio;
                convenioAlterar.rzsocial        = entidade.rzsocial;
                convenioAlterar.nmfantasia      = entidade.nmfantasia;
                convenioAlterar.nucnpj          = entidade.nucnpj;
                convenioAlterar.nuinscestadual  = entidade.nuinscestadual;
                convenioAlterar.nuinscmunicipal = entidade.nuinscmunicipal;
                convenioAlterar.dsendereco      = entidade.dsendereco;
                convenioAlterar.nuendereco      = entidade.nuendereco;
                convenioAlterar.dscomplemento   = entidade.dscomplemento;
                convenioAlterar.nucep           = entidade.nucep;
                convenioAlterar.nmbairro        = entidade.nmbairro;
                convenioAlterar.nmcidade        = entidade.nmcidade;
                convenioAlterar.nufone          = entidade.nufone;
                convenioAlterar.nucelular       = entidade.nucelular;
                convenioAlterar.email           = entidade.email;
                convenioAlterar.nmcontato       = entidade.nmcontato;
                convenioAlterar.nufonecontato   = entidade.nufonecontato;
                convenioAlterar.nucelularcontato = entidade.nucelularcontato;
                convenioAlterar.emailcontato    = entidade.emailcontato;
                convenioAlterar.dsobservacao    = entidade.dsobservacao;
                convenioAlterar.dtCadastro      = entidade.dtCadastro;
                convenioAlterar.usuinclusao     = entidade.usuinclusao;
                convenioAlterar.usualteracao    = entidade.usualteracao;
                convenioAlterar.Uf = contexto.Ufs.ToList().Where(x => x.IdUf == entidade.Uf.IdUf).FirstOrDefault();
            }

            else
            {
              entidade.Uf = contexto.Ufs.ToList().Where(x => x.IdUf == entidade.Uf.IdUf).FirstOrDefault();
              contexto.Conveniadas.Add(entidade);            
            }

            contexto.SaveChanges();
        }


        public void excluir(EmpresaConveniada entidade)
        {
            if(entidade.idEmpresaConveniada > 0)
            {
             var convenioExcluir = contexto.Conveniadas.First(x => x.idEmpresaConveniada == entidade.idEmpresaConveniada);
             contexto.Set<EmpresaConveniada>().Remove(convenioExcluir);
             contexto.SaveChanges();
            }
        }

        public EmpresaConveniada porId(int id)
        {
          return contexto.Conveniadas.First(x => x.idEmpresaConveniada == id);
        }

        public IEnumerable<EmpresaConveniada> listarTodos()
        {
         return contexto.Conveniadas.Include(x => x.Uf).ToList();
        }
    }
}





O problema é que quando vou salvar, ocorre um erro


Line 242:            <td>
Line 243:
Line 244:                @Html.DropDownList("UfId", String.Empty);
Line 245:
Line 246:


Algúem pode me ajudar?
Plinio Costa

Plinio Costa

Responder

Post mais votado

20/08/2015

Desculpa, não analisei corretamente seu problema.

Vamos lá, seu primeiro erro está aqui:

 public int idUF;


Você não adicionou os métodos get() e set(), não enviando assim valores para o objeto. Modifique para:

 public int idUF{ get; set; }


E alterei também a forma que você passa os dados para o DropDown, criando assim a ViewBag:

var todasUfs = db.Uf.ToList();
            ViewBag.UfId = todasUfs.Select(c => new SelectListItem
            {
                Value = c.IdUf.ToString(),
                Text = c.nmuf
            });


E na View, chamo ele desta forma:
@Html.DropDownList("idUF", new SelectList(ViewBag.UfId, "value", "Text"))

Isso é apenas uma forma que gosto de usar, não interfere em seu funcionamento.

Eu refiz o seu projeto aqui, sem o repositório, e está funcional. Se quiser realizar o download para testar, basta acessar este link e fazer o download.

Lembrando, após adicionar os parâmetros, você irá precisar alterar seu BD. Se usa migrations, você não terá problemas. Por via das dúvidas, esse é o código sql:
IF object_id(N'[dbo].[FK_dbo.EmpresaConveniadas_dbo.Ufs_Uf_IdUf]', N'F') IS NOT NULL
    ALTER TABLE [dbo].[EmpresaConveniadas] DROP CONSTRAINT [FK_dbo.EmpresaConveniadas_dbo.Ufs_Uf_IdUf]
IF EXISTS (SELECT name FROM sys.indexes WHERE name = N'IX_Uf_IdUf' AND object_id = object_id(N'[dbo].[EmpresaConveniadas]', N'U'))
    DROP INDEX [IX_Uf_IdUf] ON [dbo].[EmpresaConveniadas]
EXECUTE sp_rename @objname = N'dbo.EmpresaConveniadas.Uf_IdUf', @newname = N'idUF', @objtype = N'COLUMN'
ALTER TABLE [dbo].[EmpresaConveniadas] ALTER COLUMN [idUF] [int] NOT NULL
CREATE INDEX [IX_idUF] ON [dbo].[EmpresaConveniadas]([idUF])
ALTER TABLE [dbo].[EmpresaConveniadas] ADD CONSTRAINT [FK_dbo.EmpresaConveniadas_dbo.Ufs_idUF] FOREIGN KEY ([idUF]) REFERENCES [dbo].[Ufs] ([IdUf]) ON DELETE CASCADE




Existe mais algumas coisinhas que eu mudaria, mas não estou com tempo agora, se quiser posso lhe enviar depois.

Randrade

Randrade
Responder

Mais Posts

19/08/2015

Randrade

Poste sua entidade EMPRESACONVENIADA, o restante de sua view e o erro completo, por gentileza.
Responder

19/08/2015

Plinio Costa

Entidade EmpresaConveniada:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Exodo.Dominio
{

   public class EmpresaConveniada
    {
       [Required]
       [Key]
        public int idEmpresaConveniada { get; set; }

       [Required(ErrorMessage="Informe o nome do convênio")]
       [StringLength(150, ErrorMessage="Nome do convênio possui limite de 150 caracteres")]
       [Display(Name="Convênio")]
        public string nmconvenio { get; set; }

       [Required(ErrorMessage="Informe a Razão Social da Empresa Conveniada")]
       [StringLength(150, ErrorMessage="Razão Social da Empresa Conveniada Possui Limite de 150 Caracteres")]
       [Display(Name = "Razão Social")]
       public string rzsocial { get; set; }

       [Required(ErrorMessage="Informe o Nome Fantasia da Empresa Conveniada")]
       [StringLength(100, ErrorMessage="Nome Fantasia Possui Limite de 100 Caracteres")]
       [Display(Name = "Nome Fantasia")]
       public string nmfantasia { get; set; }

       [Required(ErrorMessage="Informe o C.N.P.J. da Empresa Conveniada")]
       [StringLength(20, ErrorMessage="CNPJ Possui Limite de 20 Caracteres")]
       [Display(Name = "C.N.P.J.")]
       public string nucnpj { get; set; }

       [Required(ErrorMessage="Informe a Inscrição Estadual da Empresa Conveniada")]
       [StringLength(20, ErrorMessage = "O campo Inscrição Estadual possui o limite de 20 caracteres")]
       [Display(Name = "Inscrição Estadual")]
       public string nuinscestadual { get; set; }

       [StringLength(15, ErrorMessage="Inscrição Municipal da Empresa Conveniada Possui Limite de 15 Caracteres")]
       [Display(Name = "Inscrição Muncipal")]
        public string nuinscmunicipal { get; set; }

       [Display(Name = "Endereço")]
       [StringLength(200, ErrorMessage = "O campo endereço possui o limite de 200 caracteres")]
       [Required(ErrorMessage = "Endereço do estabelecimento é obrigatório")]
       public string dsendereco { get; set; }

       [Display(Name = "Número")]
       [StringLength(10, ErrorMessage = "O campo número do endereço possui limite de 10 caracteres")]
       [Required(ErrorMessage = "O número do endereço é obrigatório")]
       public string nuendereco { get; set; }

       [Display(Name = "Complemento")]
       [StringLength(10, ErrorMessage="O campo Complemento possui limite de 10 caracteres")]
       public string dscomplemento { get; set; }

       [Display(Name = "CEP")]
       [StringLength(12, ErrorMessage = "O campo CEP possui limite de 12 caracteres")]
       [Required(ErrorMessage = "O CEP é obrigatório")]
       public string nucep { get; set; }

       [Display(Name = "Bairro")]
       [StringLength(120, ErrorMessage = "O campo Bairro possui limite de 120 caracteres")]
       [Required(ErrorMessage = "O Bairro é obrigatório")]
       public string nmbairro { get; set; }

       [Display(Name = "Cidade")]
       [StringLength(120, ErrorMessage = "O campo Cidade possui limite de 120 caracteres")]
       [Required(ErrorMessage = "Cidade é obrigatório")]
       public string nmcidade { get; set; }

       [Display(Name = "Fone")]
       [StringLength(15, ErrorMessage = "O campo Fone da Empresa Conveniada possui o limite de 15 caracteres")]
       public string nufone { get; set; }

       [Display(Name = "Celular")]
       [StringLength(15, ErrorMessage = "O campo Celular da Empresa Conveniada possui o limite de 15 caracteres")]
       public string nucelular { get; set; }

       [Display(Name = "e-mail")]
       [StringLength(150, ErrorMessage = "O campo e-mail da Empresa Conveniada possui o limite de 150 caracteres")]
       public string email { get; set; }

       [Display(Name = "Observação")]
       [StringLength(300, ErrorMessage = "O Campo Observação possui limite de 300 caracteres")]
       public string dsobservacao { get; set; }

       [Display(Name = "Data Cadastro")]
       [DataType(DataType.Date)]
       [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
       public DateTime dtCadastro { get; set; }



       [Display(Name = "Nome Contato")]
       [StringLength(20, ErrorMessage = "O campo Nome Contato possui o limite de 20 caracteres")]
       [Required(ErrorMessage = "Nome do Contato é obrigatório")]
       public string nmcontato { get; set; }

       [Display(Name = "Fone Contato")]
       [StringLength(15, ErrorMessage = "O campo Fone do Contato possui o limite de 15 caracteres")]
       [Required(ErrorMessage = "Fone do Contato é obrigatório")]
       public string nufonecontato { get; set; }

       [Display(Name = "Celular Contato")]
       [StringLength(15, ErrorMessage = "O campo Celular do Contato possui o limite de 15 caracteres")]
       [Required(ErrorMessage = "Número do Celular do Contato é obrigatório")]
       public string nucelularcontato { get; set; }

       [Display(Name = "e-mail Contato")]
       [StringLength(150, ErrorMessage = "O campo e-mail do Contato possui o limite de 150 caracteres")]
       [Required(ErrorMessage = "O campo e-mail do contato é obrigatório")]
       public string emailcontato { get; set; }
       
       [Display(Name="Data Inclusão")]
       [DataType(DataType.Date)]
       [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")] 
       public DateTime dtinclusao { get; set; }

       [Display(Name="Data Alteração")]
       [DataType(DataType.Date)]
       [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]
       public DateTime dtalteracao { get; set; }

       [Display(Name="Usuário Inclusão")]
       public string usuinclusao { get; set; }

       [Display(Name="Usuário Alteração")]
       public string usualteracao { get; set; }

       [Display(Name = "U.F.")]
       public virtual Uf Uf { get; set; }

       public int idUF;






       
    }
}






View:


@model Exodo.Dominio.EmpresaConveniada

@{
    ViewBag.Title = "Adicionar";    
}

@using (Html.BeginForm()) 
{

    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

   

    
    <fieldset>
        <legend>Informações Básicas</legend>

    <table>

        <tr>

            <td>
               @Html.LabelFor(model => model.nmconvenio)     
            </td>

            <td>
              @Html.LabelFor(model => model.rzsocial)
            </td>

            <td>
               @Html.LabelFor(model => model.nmfantasia)
            </td>

        </tr>

        <tr>

        <td>
          @Html.EditorFor(m => m.nmconvenio)
        </td>

        <td>
          @Html.EditorFor(m => m.rzsocial)
        </td>

        <td>
          @Html.EditorFor(m => m.nmfantasia)
        </td>


        </tr>

        <tr>
          
          <td>
            @Html.LabelFor(model => model.nucnpj)
          </td>    

          <td>
            @Html.LabelFor(model => model.nuinscestadual)
          </td>    

          <td>
            @Html.LabelFor(model => model.nuinscmunicipal)
          </td>    



        </tr>

        <tr>
            
         <td>
           @Html.EditorFor(m => m.nucnpj)
         </td>

         <td>
            @Html.EditorFor(m => m.nuinscestadual)
         </td>

         <td>
            @Html.EditorFor(m => m.nuinscmunicipal)
         </td>


        </tr>


        <tr>

            <td>
               @Html.LabelFor(model => model.nufone)
            </td>

            <td>
               @Html.LabelFor(model => model.nucelular)
            </td>

            <td>
               @Html.LabelFor(model => model.email)
            </td>

        </tr>

        <tr>

         <td>
            @Html.EditorFor(m => m.nufone)
         </td>

         <td>
           @Html.EditorFor(m => m.nucelular)
         </td>

         <td>
           @Html.EditorFor(m => m.email)
         </td>



        </tr>


     </table>

    </fieldset>

    
   <fieldset>
    <legend>Endereço</legend>
    
    <table>

        <tr>

            <td>
               @Html.LabelFor(model => model.nucep)
            </td>

        </tr>




        <tr>
         <td>
           @Html.EditorFor(m => m.nucep)
         </td>


        </tr>


        <tr>

            <td>
                @Html.LabelFor(model => model.dsendereco)
            </td>

            <td>
              @Html.LabelFor(model => model.nuendereco)
            </td>

            <td>
              @Html.LabelFor(model => model.dscomplemento)
            </td>



        </tr>


        <tr>

         <td>
           @Html.EditorFor(m => m.dsendereco)
         </td>

         <td>
           @Html.EditorFor(m => m.nuendereco)
         </td>


         <td>
           @Html.EditorFor(m => m.dscomplemento)
         </td>



        </tr>

        <tr>

            <td>
              @Html.LabelFor(model => model.nmbairro)
            </td>

            <td>
              @Html.LabelFor(model => model.nmcidade)
            </td>

            <td>
                UF:
            </td>

        </tr>

        <tr>

            <td>
              @Html.EditorFor(m => m.nmbairro)
            </td>

            <td>
              @Html.EditorFor(m => m.nmcidade)                
            </td>

            <td>

                @Html.DropDownList("UfId", String.Empty);


@*
                @Html.DropDownListFor(m => m.idUF,(
                    (IEnumerable<Exodo.Dominio.Uf>)
                        ViewBag.ufsListadas).Select(option => new SelectListItem{
                                                    Text  = option.sguf,
                                                    Value = Convert.ToString(option.IdUf),
                                                    Selected = (Model != null) && (option.IdUf == Model.idUF)}), 
                                                    "Selecione U.F.", new {@class = "form-control"})
*@

            </td>


        </tr>

    </table>


     <fieldset>
      <legend>Informações Sobre o Contato / Representante </legend>

        <table>

            <tr>

                <td>
                    @Html.LabelFor(model => model.nmcontato)
                </td>

                <td>
                    @Html.LabelFor(model => model.nufonecontato)
                </td>

                <td>
                    @Html.LabelFor(model => model.nucelularcontato)
                </td>

                <td>
                    @Html.LabelFor(model => model.emailcontato)
                </td>




            </tr>


            <tr>

                 <td>
                    @Html.EditorFor(m => m.nmcontato)
                 </td>

                 <td>
                   @Html.EditorFor(m => m.nufonecontato)
                 </td>

                 <td>
                    @Html.EditorFor(m => m.nucelularcontato)
                 </td>


                 <td>
                    @Html.EditorFor(m => m.emailcontato)
                 </td>



            </tr>


        </table>


       </fieldset>

    </fieldset>

   
  <table>

      <tr>
          <td>
             @Html.DevExpress().Button(settings =>
                {
                    settings.Name = "btnSalvar";
                    settings.Text = "Salvar Registro" ;
                    settings.UseSubmitBehavior = true;
                }).GetHtml()
          </td>

      </tr>

      <tr>

          <td>
          <input type="submit" value="Salvar" />
          </td>

          <td>
            @Html.ActionLink("Retornar à Tela Anterior", "Index")
          </td>
     </tr>


  </table>
    
    
  
    
       
    
}


@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}




Mensagem de erro:


[InvalidOperationException: There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'UfId'.]
   System.Web.Mvc.Html.SelectExtensions.GetSelectData(HtmlHelper htmlHelper, String name) +205
   System.Web.Mvc.Html.SelectExtensions.SelectInternal(HtmlHelper htmlHelper, ModelMetadata metadata, String optionLabel, String name, IEnumerable`1 selectList, Boolean allowMultiple, IDictionary`2 htmlAttributes) +142
   System.Web.Mvc.Html.SelectExtensions.DropDownList(HtmlHelper htmlHelper, String name, String optionLabel) +20
   ASP._Page_Views_empresaconveniada_Adicionar_cshtml.Execute() in d:\Softwares\Web\Exodo\Exodo\Exodo\Views\EmpresaConveniada\Adicionar.cshtml:236
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +197
   System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +103
   System.Web.WebPages.StartPage.RunPage() +17
   System.Web.WebPages.StartPage.ExecutePageHierarchy() +62
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +76
   System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +233
   System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +107
   System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +291
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13
   System.Web.Mvc.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17() +23
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +245
   System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +22
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +176
   System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +75
   System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +99
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +50
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
   System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +14
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +39
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +29
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +25
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +31
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9651796
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
Responder

19/08/2015

Randrade

O seu erro está ao colocar um DropDown vazio em sua view.

@Html.DropDownList("UfId", String.Empty)



Você quer que ele fique realmente vazio ou era para retornar algo nele?
Responder

19/08/2015

Plinio Costa

Ele tem que retornar. Ele exibe pra mim todas as Ufs, porém o erro acontece quando eu salvo.
Aí eu não consegui identificar porque ele não está passando o valor da UF selecionada.
Responder

19/08/2015

Randrade

Tem algo errado com seu código então.

Esse código aqui preenche seu dropdown com os valores de uma ViewBag, porém ele está comentado.

@*
                @Html.DropDownListFor(m => m.idUF,(
                    (IEnumerable<Exodo.Dominio.Uf>)
                        ViewBag.ufsListadas).Select(option => new SelectListItem{
                                                    Text  = option.sguf,
                                                    Value = Convert.ToString(option.IdUf),
                                                    Selected = (Model != null) && (option.IdUf == Model.idUF)}), 
                                                    "Selecione U.F.", new {@class = "form-control"})
*@


Outra coisa. ViewBag não passa entre actions. Se você está clicando em salvar, chamando uma Action Post, você precisa carregar essa ViewBag na Action Post também, senão você recebe erro mesmo.
Responder

19/08/2015

Plinio Costa

Eu comentei um componente porque segui uma tentativa de solução com o:

@Html.DropDownList("UfId", String.Empty)



Olha o código da parte específica de salvar do meu controller:


        public ActionResult Adicionar()
        {
          var todasUfs = appUf.listarTodos();
          ViewBag.UfId = new SelectList(todasUfs, "IDUF", "SGUF");


          return View();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Adicionar(EmpresaConveniada empConv)
        {

           if (ModelState.IsValid)
            {
                appConvenio.salvar(empConv);
                return RedirectToAction("Index");
            }
              var todasUfs = appUf.listarTodos();
              ViewBag.IdUf = new SelectList(todasUfs, "IDUF", "SGUF");

            return View(empConv);
        }


Responder

19/08/2015

Randrade

Retire o DropDown Empty.

Caso não consiga salvar, poste o erro que será mostrado. O erro que você está recebendo agora é justamente por causa dele.
Responder

19/08/2015

Plinio Costa

Eu já havia deixado sem o Empty, mas o erro é o mesmo.
Responder

20/08/2015

Plinio Costa

Alterei o nome da ViewBag. Passei para IDUF, o mesmo nome da coluna.
O erro mudou:

[MySqlException (0x80004005): Unknown column 'Uf_IdUf' in 'field list']
   MySql.Data.MySqlClient.MySqlStream.ReadPacket() +383
   MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId) +116
   MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId) +54
   MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) +145
   MySql.Data.MySqlClient.MySqlDataReader.NextResult() +1258
   MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) +2487
   MySql.Data.Entity.EFMySqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +58
   System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +10
   System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<Reader>b__c(DbCommand t, DbCommandInterceptionContext`1 c) +66
   System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch(TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed) +138
   System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand command, DbCommandInterceptionContext interceptionContext) +475
   System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior behavior) +240
   System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +10
   System.Data.Entity.Core.Mapping.Update.Internal.DynamicUpdateCommand.Execute(Dictionary`2 identifierValues, List`1 generatedValues) +671
   System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update() +236

[UpdateException: An error occurred while updating the entries. See the inner exception for details.]
   System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update() +488
   System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.<Update>b__2(UpdateTranslator ut) +32
   System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.Update(T noChangesResult, Func`2 updateFunction) +272
   System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.Update() +143
   System.Data.Entity.Core.Objects.ObjectContext.<SaveChangesToStore>b__35() +34
   System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction(Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) +448
   System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions options, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction) +219
   System.Data.Entity.Core.Objects.<>c__DisplayClass2a.<SaveChangesInternal>b__27() +71
   System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute(Func`1 operation) +36
   System.Data.Entity.Core.Objects.ObjectContext.SaveChangesInternal(SaveOptions options, Boolean executeInExistingTransaction) +408
   System.Data.Entity.Core.Objects.ObjectContext.SaveChanges(SaveOptions options) +39
   System.Data.Entity.Internal.InternalContext.SaveChanges() +320

[DbUpdateException: An error occurred while updating the entries. See the inner exception for details.]
   System.Data.Entity.Internal.InternalContext.SaveChanges() +365
   System.Data.Entity.Internal.LazyInternalContext.SaveChanges() +56
   System.Data.Entity.DbContext.SaveChanges() +52
   Exodo.Repositorio.EmpresaConveniadaRepositorio.salvar(EmpresaConveniada entidade) in d:\Softwares\Web\Exodo\Exodo\Exodo.Repositorio\EmpresaConveniadaRepositorio.cs:57
   Exodo.Aplicacao.EmpresaConveniadaAplicacao.salvar(EmpresaConveniada entidade) in d:\Softwares\Web\Exodo\Exodo\Exodo.Aplicacao\EmpresaConveniadaAplicacao.cs:22
   Exodo.Controllers.EmpresaConveniadaController.Adicionar(EmpresaConveniada empConv) in d:\Softwares\Web\Exodo\Exodo\Exodo\Controllers\EmpresaConveniadaController.cs:52
   lambda_method(Closure , ControllerBase , Object[] ) +180
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +208
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
   System.Web.Mvc.Async.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() +28
   System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +10
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +48
   System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +57
   System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +223
   System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +48
   System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +24
   System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +102
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +43
   System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +14
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +57
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +47
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +25
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +47
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9651796
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
Responder

20/08/2015

Plinio Costa

Randrade, muito obrigado pela ajuda !!

deu certo agora.

Retirei o trecho:

entidade.Uf = contexto.Ufs.ToList().Where(x => x.IdUf == entidade.Uf.IdUf).FirstOrDefault();


e fiz as alterações exatamente como me passou e de certo !!
Muito obrigado !!
Responder

20/08/2015

Randrade

Sem problemas. E desculpa as primeiras dicas, é que estava com a cabeça cheia ontem e não consegui pensar direito.

Se você já conseguiu, posso apagar o código do GitHuB?
Responder

20/08/2015

Plinio Costa

Pode apagar sim. Como marco o post como resolvido??
Muito obrigado
Responder

20/08/2015

Randrade

Pode apagar sim. Como marco o post como resolvido??
Muito obrigado


Este fórum não possui o hábito de marcar. Você definindo a melhor resposta, como já fez, já está bom.
Fico feliz em ter ajudado. Qualquer coisa estamos aí.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar