我有一个包含产品和类别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 回答
这是因为你的
Create
视图需要一个类型为AdFormViewModel
的模型,但是在你的Create
动作(具有[AcceptVerbs(HttpVerbs.Post)]
属性的动作)中,你会返回一个类型为Ad
的模型(参见它所说的return View(ad)
行) .就像异常消息所说的那样;它需要一个
AmericanAds.Controllers.AdFormViewModel
但你发送的是AmericanAds.Model.Ad
.不,我不认为这与验证有任何关系 .