2010-03-04 80 views
0

我有一個包含類別的產品,一個的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。

謝謝!

+0

這是asp.net-mvc 2嗎?否則,您正在運行哪個驗證引擎?你能向我們展示一些視圖標記和這個失敗的行爲嗎? – 2010-03-04 14:40:36

+0

它是mvc 1.0。我會在帖子 – 2010-03-04 14:55:22

+0

中添加一些代碼出於好奇,在這種情況下如何驗證失敗的下拉菜單?它有時會工作,有時會失敗嗎?如果是這樣,每次輸入是什麼?它總是失敗嗎?如果是這樣的話在哪一行? – 2010-03-04 15:08:47

回答

0

這是因爲你的Create視圖需要在你的Create動作(一個與[AcceptVerbs(HttpVerbs.Post)]屬性)返回Ad類型的模型(見線的地方說return View(ad)AdFormViewModel類型,但模型。

像異常消息說;它需要一個AmericanAds.Controllers.AdFormViewModel但您發送AmericanAds.Model.Ad

不,我不認爲這有什麼與審定。

+0

Cagdas現貨,感謝我的同鄉男士;) – 2010-03-04 15:34:26

+0

@hhastekin,不客氣:) – 2010-03-04 15:38:44