验证ViewModel会引发异常

时间:2010-03-04 14:36:30

标签: asp.net-mvc validation viewmodel

我有一个包含产品和类别SelectList的viewmodel。

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 :(得分:0)

这是因为您的Create视图需要AdFormViewModel类型的模型,但在Create操作(具有[AcceptVerbs(HttpVerbs.Post)]属性的操作)中,您返回的是Ad类型的模型{1}}(请参阅return View(ad)所示的行。)

就像异常消息所说的那样;它需要AmericanAds.Controllers.AdFormViewModel,但您要发送AmericanAds.Model.Ad

不,我不认为这与验证有任何关系。