【发布时间】:2010-06-08 20:20:58
【问题描述】:
我有一个使用 MVVM 模式的 MVC2 应用程序。我正在尝试使用数据注释来验证表单输入。
在我的 ThingsController 中,我有两种方法:
[HttpGet]
public ActionResult Index()
{
return View();
}
public ActionResult Details(ThingsViewModel tvm)
{
if (!ModelState.IsValid) return View(tvm);
try
{
Query q = new Query(tvm.Query);
ThingRepository repository = new ThingRepository(q);
tvm.Things = repository.All();
return View(tvm);
}
catch (Exception)
{
return View();
}
}
我的 Details.aspx 视图被强类型化到 ThingsViewModel:
<%@ Page Title=""
Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<Config.Web.Models.ThingsViewModel>" %>
ViewModel 是一个类,由返回的 Thing 对象的 IList 和 Query 字符串(在表单上提交)组成,并具有必需的数据注释:
public class ThingsViewModel
{
public IList<Thing> Things{ get; set; }
[Required(ErrorMessage="You must enter a query")]
public string Query { get; set; }
}
当我运行它并单击表单上的提交按钮而不输入值时,我得到一个带有以下错误的 YSOD:
The model item passed into the dictionary is of type
'Config.Web.Models.ThingsViewModel', but this dictionary
requires a model item of type
System.Collections.Generic.IEnumerable`1[Config.Domain.Entities.Thing]'.
如何让数据注释与 ViewModel 一起使用?我看不到我遗漏了什么或哪里出了问题 - 在我开始进行验证之前,VM 工作正常。
【问题讨论】:
标签: c# asp.net-mvc mvvm data-annotations