Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 529293
            [titulo] => Definição de Chave Primária. ASP.NET MVC - CSharp
            [dataCadastro] => DateTime Object
                (
                    [date] => 2015-08-20 10:12:32
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 397347
            [status] => M
            [isExample] => 
            [NomeUsuario] => Randrade
            [Apelido] => 
            [Foto] => 397347_20150704190512.png
            [Conteudo] => Desculpa, não analisei corretamente seu problema.

Vamos lá, seu primeiro erro está aqui:

[code]
public int idUF;
[/code]

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

[code]
public int idUF{ get; set; }
[/code]

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

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

E na View, chamo ele desta forma:
[code]
@Html.DropDownList("idUF", new SelectList(ViewBag.UfId, "value", "Text"))
[/code]
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 [url:descricao=este link]https://github.com/renilsonmeneguci/ajudaPlinio[/url] 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:
[code]
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

[/code]


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

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

Plinio Costa
   - 19 ago 2015

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:
#Código

[codigo]
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; }




    }
}



E a minha classe UF:
#Código
[codigo]
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();
        }
    }
}


Repositório:
#Código

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


O problema é que quando vou salvar, ocorre um erro
[tagcod]
Line 242: <td>
Line 243:
Line 244: @Html.DropDownList("UfId", String.Empty);
Line 245:
Line 246:
[/tagcod]
Algúem pode me ajudar?

Post mais votado

Randrade
   - 20 ago 2015

Desculpa, não analisei corretamente seu problema.

Vamos lá, seu primeiro erro está aqui:

#Código

 public int idUF;


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

#Código
 public int idUF{ get; set; }


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

#Código
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:
#Código
@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:
#Código
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.

1
|
0

Randrade
   - 19 ago 2015

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

Plinio Costa
   - 19 ago 2015

Entidade EmpresaConveniada:
#Código

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:

#Código

@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:

#Código

[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

Randrade
   - 19 ago 2015

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

#Código

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


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

Plinio Costa
   - 19 ago 2015

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.

Randrade
   - 19 ago 2015

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.

#Código

@*
                @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.

Plinio Costa
   - 19 ago 2015

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

#Código

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


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

#Código

        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);
        }


Randrade
   - 19 ago 2015

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.

Plinio Costa
   - 19 ago 2015

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

Plinio Costa
   - 20 ago 2015

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

#Código

[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

Plinio Costa
   - 20 ago 2015

Randrade, muito obrigado pela ajuda !!

deu certo agora.

Retirei o trecho:

#Código

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 !!

Randrade
   - 20 ago 2015

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?

Plinio Costa
   - 20 ago 2015

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

Randrade
   - 20 ago 2015


Citação:
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í.