当我尝试使用 Asp.NetMVC2中的 Create 样式操作创建实体时,就会发生这种情况。
POCO 具有以下特性:
public int Id {get;set;}
[Required]
public string Message {get; set}
在创建实体时,将自动设置 Id,因此在 Create 操作中不需要它。
ModelState 说“ Id 字段是必需的”,但是我还没有设置为这样。 是不是有什么自然而然的事情发生了?
编辑-揭示原因
布拉德 · 威尔逊(Brad Wilson)通过保罗 · 斯佩兰萨(Paul Speranza)在下面的评论中回答了这个问题,他说(为保罗欢呼) :
你提供的价值 身份证,你只是不知道你是。 它在默认的路由数据中 路由(“{ 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);
}