Definição de Chave Primária. ASP.NET MVC - CSharp
19/08/2015
0
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; } }
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
Post mais votado
20/08/2015
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
Mais Posts
19/08/2015
Randrade
19/08/2015
Plinio Costa
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
19/08/2015
Randrade
@Html.DropDownList("UfId", String.Empty)
Você quer que ele fique realmente vazio ou era para retornar algo nele?
19/08/2015
Plinio Costa
Aí eu não consegui identificar porque ele não está passando o valor da UF selecionada.
19/08/2015
Randrade
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.
19/08/2015
Plinio Costa
@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); }
19/08/2015
Randrade
Caso não consiga salvar, poste o erro que será mostrado. O erro que você está recebendo agora é justamente por causa dele.
20/08/2015
Plinio Costa
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
20/08/2015
Plinio Costa
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 !!
20/08/2015
Randrade
Se você já conseguiu, posso apagar o código do GitHuB?
20/08/2015
Plinio Costa
Muito obrigado
20/08/2015
Randrade
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í.
Clique aqui para fazer login e interagir na Comunidade :)