Проверка ViewModel выдает исключение - PullRequest
0 голосов
/ 04 марта 2010

У меня есть 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.

Спасибо!

1 Ответ

0 голосов
/ 04 марта 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...