2010-03-04 76 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