当我尝试使用Asp.Net MVC 2中的“创建样式”操作创建实体时,就会发生这种情况。
POCO具有以下属性:
public int Id {get;set;}
[Required]
public string Message {get; set}
在创建实体时,会自动设置ID,因此在Create操作中不需要它。
ModelState说“ Id字段是必需的”,但我没有将其设置为。这里有自动的东西吗?
编辑-原因揭示
布拉德·威尔逊(Brad Wilson)通过保罗·斯佩兰萨(Paul Speranza)在他说的以下评论之一中回答了这个问题的原因(欢呼保罗):
您正在提供ID的值,只是不知道您的身份。它位于默认路由(“ {controller} / {action} / {id}”)的路由数据中,其默认值为空字符串,该字符串对int无效。使用操作参数上的[Bind]属性来排除ID。我的默认路由是:new {controller =“ Customer”,action =“ Edit”,id =“”} //参数默认值
编辑-更新模型技术
实际上,我通过使用TryUpdateModel和与之相关的exclude参数数组更改了再次执行此操作的方式。
[HttpPost]
public ActionResult Add(Venue collection)
{
Venue venue = new Venue();
if (TryUpdateModel(venue, null, null, new[] { "Id" }))
{
_service.Add(venue);
return RedirectToAction("Index", "Manage");
}
return View(collection);
}