首页 文章

验证ViewModel会引发异常

提问于
浏览
0

我有一个包含产品和类别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

    这是因为你的 Create 视图需要一个类型为 AdFormViewModel 的模型,但是在你的 Create 动作(具有 [AcceptVerbs(HttpVerbs.Post)] 属性的动作)中,你会返回一个类型为 Ad 的模型(参见它所说的 return View(ad) 行) .

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

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

相关问题