Как получить выбранный элемент в IEnumerable <SelectListItem>? - PullRequest
0 голосов
/ 04 января 2012

Это моя 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>  

Моя проблема в том, что когда я пытаюсь сохранить My CategoryMateriaSelecionada, как в этом коде:

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

Программа покажет мне ошибку: Элемент ViewData, имеющий ключ «CategoryMateriaSelecionada», имеет тип «System.String», но должен иметь тип «IEnumerable». в тот момент, когда я вхожу в HTTpPOST, listaCategoria не имеет значения, почему? В чем проблема, почему это не может работать?

1 Ответ

0 голосов
/ 04 января 2012

Ты должен сделать это так ...
этот пример только для демонстрации

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