2010-03-04 5 views
0

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

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.

Спасибо!

+0

Является ли это asp.net-mvc 2? В противном случае, какой механизм проверки выполняется? Можете ли вы показать нам некоторую разметку вида и действие, где это не удается? –

+0

это mvc 1.0. Я добавлю код на сообщение –

+0

Из любопытства, как может валидация не сбрасываться в этом сценарии? Случается ли это иногда и иногда терпит неудачу? Если да, то какие входы каждый раз? Всегда ли это происходит? Если да, то на какой строке? –

ответ

0

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

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

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

+0

Пятно на Кагдасе, спасибо моему земляку;) –

+0

@hhastekin, Добро пожаловать :) –

Смежные вопросы