当我尝试在 Asp.Net MVC 2 中使用 Create 样式操作创建实体时,就会发生这种情况。
POCO 具有以下属性:
public int Id {get;set;}
[Required]
public string Message {get; set}
在创建实体时,会自动设置 Id,因此在 Create 操作中不需要它。
ModelState 说“需要 Id 字段”,但我还没有这样设置。这里有什么自动发生的吗?
编辑 - 原因揭晓
Brad Wilson 通过 Paul Speranza 在下面的评论之一中回答了这个问题的原因,他说(为 Paul 欢呼):
你为 ID 提供了一个值,你只是不知道你是。它在默认路由(“{controller}/{action}/{id}”)的路由数据中,默认值为空字符串,对int无效。使用操作参数上的 [Bind] 属性来排除 ID。我的默认路由是:new { controller = "Customer", action = "Edit", id = " " } // 参数默认值
编辑 - 更新模型技术
实际上,我通过使用 TryUpdateModel 和与之关联的排除参数数组再次更改了执行此操作的方式。
[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);
}