Проверка ViewModel выдает исключение

У меня есть модель представления, которая содержит продукт и SelectList категорий.

public class AdFormViewModel
{
    public AmericanAds.Model.Ad Ad { get; set; }
    public SelectList Categories { get; set; }

    public AdFormViewModel(AmericanAds.Model.Ad ad, SelectList categories)
    {
        Ad = ad;
        Categories = categories;
    }
}

При добавлении нового продукта, если проверка раскрывающегося списка категорий не удалась, я получаю сообщение об ошибке ниже.

Элемент модели, переданный в словарь, имеет тип AmericanAds.Model.Ad, но для этого словаря требуется элемент модели типа AmericanAds.Controllers.AdFormViewModel.

Вот контроллер для создания действия.

public ActionResult Create()
    {
        AdFormViewModel data = new AdFormViewModel(
            null,
            new SelectList(_repository.CategoryList().ToList(), "CategoryId", "CategoryName")
            );

        return View(data);
    } 

    //
    // POST: /Ad/Create

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create(Ad ad)
    {
        if (ModelState.IsValid)
        {
            try
            {
                _repository.AddAd(ad);

                return RedirectToAction("Index");
            }
            catch
            {
                return View(ad);
            }
        }
        else
        {
            return View(ad);
        }
    }

Что мне не хватает?

Как вы понимаете, я новичок в ASP.Net MVC.

Спасибо!


person Hakan Hastekin    schedule 04.03.2010    source источник
comment
Это asp.net-mvc 2? В противном случае, какой механизм проверки вы используете? Можете ли вы показать нам разметку представления и действие, в котором это не удается?   -  person James Kolpack    schedule 04.03.2010
comment
это мвк 1.0. добавлю код в пост   -  person Hakan Hastekin    schedule 04.03.2010
comment
Из любопытства, как может произойти сбой проверки раскрывающегося списка в этом сценарии? Иногда это работает, а иногда нет? Если да, то каковы входные данные каждый раз? Всегда ли это терпит неудачу? Если да, то на какой линии?   -  person Nick Larsen    schedule 04.03.2010
comment
В представлении раскрывающийся список определяется как ‹%= Html.DropDownList(CategoryID, Model.Categories, Пожалуйста, выберите) %›, поэтому, если пользователь не выбирает значение и оставляет его как Пожалуйста, выберите, проверка завершается неудачно. Как понял Кагдас, проблема не была связана с проверкой, я не возвращал объект ViewModel, когда состояние модели недействительно.   -  person Hakan Hastekin    schedule 04.03.2010


Ответы (1)


Это потому, что вашему представлению Create требуется модель типа AdFormViewModel, но в вашем действии Create (с атрибутом [AcceptVerbs(HttpVerbs.Post)]) вы возвращаете модель типа Ad (см. строки, где написано return View(ad)).

Как говорится в сообщении об исключении; Требуется AmericanAds.Controllers.AdFormViewModel, но вы отправляете AmericanAds.Model.Ad.

И нет, я не думаю, что это имеет какое-то отношение к проверке.

person Çağdaş Tekin    schedule 04.03.2010