I'm having a problem with the Employee Position that stays in a separate Table, when I try to create an employee selecting the position, it's the error ... but if I assign the position in the Controller (Ex: official.CargoID = 1) it works normal ... I also tried to pass the job by parameter by adding the following:
public ActionResult Create([Bind(Include = "PessoaID,Nome,Telefone,Celular,Whatsapp,Email,CPF,RG,CTPS,DataNascimento,DataAdmissao,DataDemissao,Senha,CargoID")] Funcionario funcionario, string salario, string cargo)
{
funcionario.CargoID = Convert.ToInt32(Cargo);
.
.
.
ViewBag.CargoID = new SelectList(db.Cargos, "CargoID", "Descricao", funcionario.CargoID);
return View(funcionario);
}
but it comes with null value.
Job Class:
public class Cargo
{
[Key]
public int CargoID { get; set; }
public string Descricao { get; set; }
public virtual ICollection<Funcionario> Funcionarios { get; set; }
}
Employee Class:
public class Funcionario : Pessoa
{
[Required(ErrorMessage = "Preencha o RG")]
[DisplayName("RG")]
public string RG { get; set; }
[Required(ErrorMessage = "Preencha o numero da CTPS")]
[DisplayName("CTPS")]
public string CTPS { get; set; }
[Required(ErrorMessage = "Preencha data de nascimento")]
[DisplayName("Data de Nascimento")]
[DataType(DataType.Date, ErrorMessage = "Formato Incorreto")]
public DateTime DataNascimento { get; set; }
[Required(ErrorMessage = "Preencha a data de admissão")]
[DisplayName("Data de Admissão")]
[DataType(DataType.Date, ErrorMessage = "Formato Incorreto")]
public DateTime DataAdmissao { get; set; }
[DisplayName("Data de Demissão")]
[DataType(DataType.Date, ErrorMessage = "Formato Incorreto")]
public DateTime DataDemissao { get; set; }
[Required(ErrorMessage = "Preencha o Salário")]
[DisplayName("Salário")]
public decimal Salario { get; set; }
[StringLength(25, MinimumLength = 5, ErrorMessage = "A senha deve ter no mínimo 5 e no máximo 25 caracteres.")]
[Required(ErrorMessage = "Preencha a senha")]
[DisplayName("Senha")]
[DataType(DataType.Password)]
public string Senha { get; set; }
//Relacionamentos
public int CargoID { get; set; }
public virtual Cargo Cargo { get; set; }
}
How is a Person's Inheritance, the people class:
public class Pessoa
{
[Key]
public int PessoaID { get; set; }
[Required(ErrorMessage = "Preencha o nome")]
[DisplayName("Nome")]
[StringLength(150, MinimumLength = 2, ErrorMessage = "O nome deve ter no mínimo 2 e no máximo 150 caracteres.")]
public string Nome { get; set; }
[DisplayName("Telefone")]
public string Telefone { get; set; }
[DisplayName("Celular")]
public string Celular { get; set; }
[DisplayName("Email")]
[StringLength(150, ErrorMessage = "O E-mail deve ter no máximo 150 caracteres.")]
public string Email { get; set; }
[Required(ErrorMessage = "Preencha o CPF")]
[DisplayName("CPF")]
[StringLength(14, MinimumLength = 14, ErrorMessage = "O CPF deve 14 caracteres.")]
public string CPF { get; set; }
public int Tipo { get; set; }
}
and My controller:
public ActionResult Create()
{
ViewBag.CargoID = new SelectList(db.Cargos, "CargoID", "Descricao");
return View();
}
// POST: Funcionario/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "PessoaID,Nome,Telefone,Celular,Whatsapp,Email,CPF,RG,CTPS,DataNascimento,DataAdmissao,DataDemissao,Senha,CargoID")] Funcionario funcionario, string salario)
{
if (funcionario.Email == "")
{
ViewBag.Error = "Informe o e-mail do funcionario";
return View();
}
if (funcionario.DataNascimento > DateTime.Now || funcionario.DataNascimento < DateTime.Now.AddYears(-100))
{
ViewBag.Error = "Verifique a data de nascimento";
return View();
}
if (funcionario.DataAdmissao > DateTime.Now || funcionario.DataAdmissao < DateTime.Now.AddYears(-50))
{
ViewBag.Error = "Verifique a data de admissão";
return View();
}
if (salario != "")
{
salario = Regex.Replace(salario, "[^0-9,]", "");
funcionario.Salario = Convert.ToDecimal(salario);
}
else
{
ViewBag.Error = "O salário não pode ficar Vazio";
return View();
}
funcionario.Tipo = 1;
if (ModelState.IsValid)
{
db.Pessoas.Add(funcionario);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.CargoID = new SelectList(db.Cargos, "CargoID", "Descricao", funcionario.CargoID);
return View(funcionario);
}
When I click save it from this error:
There is no ViewData item of type 'IEnumerable' that has the key 'CargoID'.