Ошибка при попытке опубликовать форму MVC с раскрывающимся списком - PullRequest
0 голосов
/ 27 января 2012

Я посмотрел похожие посты, но ничего не помогало в моем случае. У меня есть форма, которая отлично загружается, и я вижу выпадающий категории со всеми категориями в нем. Проблема в том, когда я пытаюсь опубликовать форму.

Я получаю эту ошибку:

Элемент ViewData, имеющий ключ 'Category', имеет тип 'System.String', но должен иметь тип 'IEnumerable'.

@Html.DropDownList ("Категория", Model.Categories) <- красный цвет </em>

Вот мой взгляд:

@using (Html.BeginForm("Save", "Album", FormMethod.Post, new { id = "frmNewAlbum" }))
{                
   @Html.DropDownList("Category", Model.Categories)
}

Вот моя модель:

public class AlbumModel
{        
        public string Title { get; set; }

        public string Category { get; set; }

        public List<SelectListItem> Categories { get; set; } <-- holds categories
}

Это действия контроллера для просмотра страницы:

[HttpGet]
public ActionResult Save()
        {
            var model = new AlbumModel();
            var categories = new List<SelectListItem>() { new SelectListItem() { Text = "-- pick --" } };
            categories.AddRange(svc.GetAll().Select(x => new SelectListItem() { Text = x.Name, Value = x.Name }));
            model.Categories = categories;
            return View(model);
        }

Действие, которое получает сообщение:

[HttpPost]
    public ActionResult Save(AlbumModel model)
    {            
                var album = new AlbumDoc()
                {                        
                    Category = model.Category,
                    Title = model.Title,
                };

                svc.SaveAlbum(album);

        return View(model);
    }

1 Ответ

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

В вашем действии POST вы, кажется, снова отображаете то же представление, но не заполняете свойство Categories в вашей модели представления, которая будет содержать значения раскрывающегося списка. И, кстати, я бы порекомендовал вам использовать строго типизированный помощник. Итак:

public class AlbumController: Controller
{
    [HttpGet]
    public ActionResult Save()
    {
        var model = new AlbumModel();
        model.Categories = GetCategories();
        return View(model);
    }

    [HttpPost]
    public ActionResult Save(AlbumModel model)
    {            
        var album = new AlbumDoc()
        {                        
            Category = model.Category,
            Title = model.Title,
        };
        svc.SaveAlbum(album);
        model.Categories = GetCategories();
        return View(model);
    }

    private IList<SelectListItem> GetCategories()
    {
        return svc
            .GetAll()
            .ToList()
            .Select(x => new SelectListItem
            { 
                Text = x.Name, 
                Value = x.Name 
            });
    }
}

и по вашему мнению:

@model AlbumModel
...
@using (Html.BeginForm("Save", "Album", FormMethod.Post, new { id = "frmNewAlbum" }))
{                
   @Html.DropDownListFor(
       x => x.Category, 
       Model.Categories,
       -- pick --
   )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...