如何在IEnumerable <selectlistitem>?</selectlistitem>中获取所选项目

时间:2012-01-03 20:47:49

标签: asp.net-mvc-3 entity

这是我的ViewModel:

//Categoria da Materia
   public IEnumerable<SelectListItem> ListaCategorias { get; set; }

  //Categoria Matéria que foi selecionada pelo usuário na área pública
    public string CategoriaMateriaSelecionada { get; set; }

这是我的控制器:

private IEnumerable<SelectListItem> GetCategoria()
        {
            var query = contexto.CategoriaMateria.OrderBy(x => x.Nome).ToList();

            var categorias = query.AsEnumerable().Select(x => new SelectListItem
            {
                Value = x.Id.ToString(),
                Text = x.Nome
            }).ToList();

            return categorias;
         }

这是我的观点:

<label class="editor-label">
            @Html.LabelFor(model => model.CategoriaMateriaSelecionada)
        </label>
        <label class="editor-field">
           @Html.DropDownListFor(model => model.CategoriaMateriaSelecionada, Model.ListaCategorias)
        </label>  

我的问题是,当我试图保存我的CategoriaMateriaSelecionada时,就像在这段代码中一样:

 [HttpPost]
        public ActionResult Novo(NovoViewModel novoViewModel , string imagemCapa)
        {

            if (ModelState.IsValid)
            {
                Materia noticia = new Materia()
                                      {
                                          CategoriaMateria = contexto.CategoriaMateria.Find(Convert.ToInt64((novoViewModel.CategoriaMateriaSelecionada))),
                                          Titulo = novoViewModel.Titulo,
                                          Chamada = novoViewModel.Chamada,
                                          Corpo = novoViewModel.Corpo,
                                          DataPublicaco = DateTime.Now,
                                          Status = novoViewModel.Status,
                                          Imagem = contexto.Imagem.Find(Convert.ToInt64(imagemCapa))
                                      };

                contexto.Materia.Add(noticia);
                contexto.SaveChanges();
                return RedirectToAction("Index");

            }

            return View(novoViewModel);
        }

程序显示错误: 具有键“CategoriaMateriaSelecionada”的ViewData项的类型为“System.String”,但必须是“IEnumerable”类型。 在我进入HTTpPOST的那一刻,listaCategoria为空为什么? 这个问题无法解决的原因是什么?

1 个答案:

答案 0 :(得分:0)

你应该这样做....
此示例仅用于演示

//Categoria da Materia
public IEnumerable<SelectListItem> ListaCategorias 
{ 
    get { return GetCategoria(); }   
}