ASP.NET MVC4
I have a data dropdown problem of a dropdownlist where the same list correctly the values, but when choosing some value and posting on the page the value arrives as null in the controller.
My Domain is like this: Table of Contents
namespace VelhosAmigos.WebSite.Dominio.Entidade
{
public class Conteudo
{
[Key]
[HiddenInput(DisplayValue = false)]
public int IdConteudo {get; set;}
[Required(ErrorMessage = "Digite um Título")]
[Display(Name = "Título: ")]
[StringLength(150, ErrorMessage = "O Título da publicação não pode ter mais que 150 caracteres.")]
[Description("Teste de descrição")]
public string Titulo { get; set; }
[Required(ErrorMessage = "Digite um Conteúdo para exibição")]
[Display(Name = "Conteúdo completo: ")]
[DataType(DataType.MultilineText)]
public string txt_Conteudo { get; set; }
//[Required(ErrorMessage = "Escolha uma categoria")]
[Display(Name = "Categoria: ")]
public virtual Categoria Categoria { get; set; }
And the Categories table:
namespace VelhosAmigos.WebSite.Dominio.Entidade
{
public class Categoria
{
[Key]
public int IdCategoria { get; set; }
public string NomeCategoria { get; set; }
public int IdSessao { get; set; }
}
}
In Category repository I have a list of all categories:
namespace VelhosAmigos.WebSite.Dominio.Repositorio
{
public class CategoriasRepositorio
{
private readonly EFDbContext _context = new EFDbContext();
public IEnumerable<Categoria> Categorias
{
get { return _context.Categorias; }
}
public List<Categoria> retornarTodas()
{
var categorias = (from c in _context.Categorias
select c).ToList();
return categorias;
}
}
}
And in controler, I have a ViewBag
that passes all the categories registered in the database to be used as Dropdownlist
in creating or changing new content.
public ViewResult Alterar(int IdConteudo)
{
_repositorio = new ConteudosRepositorio();
Conteudo conteudo = _repositorio.Conteudos
.FirstOrDefault(c => c.IdConteudo == IdConteudo);
var _categRepositorio = new CategoriasRepositorio().retornarTodas();
ViewBag.Categorias = _categRepositorio;
return View(conteudo);
}
In% change% I have View
that generates the right data, just need to add an empty option at the beginning with the Select a Category option that I still do not know how to do.
@Html.DropDownListFor(c => c.Categoria, new SelectList(@ViewBag.Categorias, "IdCategoria", "NomeCategoria"), new { @class = "form-control" })
The result of this DropdownList is apparently correct:
<select name="Categoria" id="Categoria" class="form-control">
<option value="1">Fique por Dentro</option>
<option value="2">Artigos</option>
</select>
But when choosing an option and filling out the other requirements of the form and sending the data ... no Dropdownlist
of HttpPost
:
[HttpPost]
public ActionResult Alterar(Conteudo conteudo)
{
var _categRepositorio = new CategoriasRepositorio().retornarTodas();
ViewBag.Categorias = _categRepositorio;
if (ModelState.IsValid)
{
if (conteudo.IdConteudo > 0)
{
TempData["mensagem"] = string.Format("{0} foi alterado com sucesso!", conteudo.Titulo);
}
else
{
TempData["mensagem"] = string.Format("{0} foi cadastrado com sucesso!", conteudo.Titulo);
}
_repositorio = new ConteudosRepositorio();
_repositorio.Salvar(conteudo);
return RedirectToAction("Listar");
};
return View(conteudo);
}
You are returning the value of the Category as controler
. ai returns to the page with the redone listing and the error below the field:
<span data-valmsg-replace="true" data-valmsg-for="Categoria" class="field-validation-error">The value '1' is invalid.</span>
In%%, the Category field is as NULL
, and if I manually register in the database the SQL Server
displays the contents registered correctly.