Dan*_*ann 69 asp.net-mvc data-annotations asp.net-mvc-2
当我尝试使用Asp.Net MVC 2中的创建样式操作创建实体时,会发生这种情况.
POCO具有以下特性:
public int Id {get;set;}
[Required]
public string Message {get; set}
Run Code Online (Sandbox Code Playgroud)
在创建实体时,会自动设置Id,因此在Create操作中不需要它.
ModelState表示"需要Id字段",但我没有将其设置为如此.这里有自动发生的事吗?
编辑 - 原因显示
Brad Wilson通过Paul Speranza在下面的一条评论中回答了这个问题的原因,他说(欢呼保罗):
你提供了身份证的价值,你只是不知道你是谁.它位于默认路由的路由数据中("{controller}/{action}/{id}"),其默认值为空字符串,对int无效.使用action参数的[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);
}
Run Code Online (Sandbox Code Playgroud)
Ros*_*ied 86
您可以添加属性:
[Bind(Exclude = "Id")]
Run Code Online (Sandbox Code Playgroud)
在方法而不是类中的参数上,在创建时,您可以排除它并在编辑时仍然是必需的:
public ActionResult Create([Bind(Exclude = "Id")] User u)
{
// will exclude for create
}
public ActionResult Edit(User u)
{
// will require for edit
}
Run Code Online (Sandbox Code Playgroud)
Uli*_*ses 18
我遇到了这个问题,我在表单中动态地将"对象"添加到列表中.因此,我们的用户可以添加,删除或更新.除了创建新项目的情况外,这一切都运行良好.因此,在我的情况下,不包括Id属性.解决方案是使ID为Nullable:
public int? Id { get; set; }
Run Code Online (Sandbox Code Playgroud)
这样,现有项目将具有值,而新项目将具有null.好东西.
And*_*nea 11
很棒的问题和答案,拯救了我......落后.我需要添加一些东西:
代替
[Bind(Exclude = "Id")]
Run Code Online (Sandbox Code Playgroud)
我觉得最好用
[Bind(Include = "Prop1, Prop2, Prop3, etc")]
Run Code Online (Sandbox Code Playgroud)
..其中Prop1,Prop2和Prop3是您希望在操作级别绑定的唯一属性.
由于这是白名单,而不是黑名单.白名单更好,更安全.这样您也可以解决过度发布和过度发布的风险.见Brad Wilson的帖子.
[Bind(Exclude = "Id")]
public class Hebe
{
public int Id {get;set;}
[Required]
public string Message {get; set}
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,它不会在创建时绑定模型的Id属性
小智 7
Id应该从客户端发送为0.模型没有Id = 0的问题,这是int的默认值.问题是他没有看到来自客户端的价值,或者是空间或空的.我有隐藏的输入表示ID(或复杂的对象NestedPropertyId/NestedProperty.Id),所以我要确保它与零值开始.
<input type="hidden" id="id" value="0" />
<input type="hidden" id="eventId" value="0"/>
<input type="hidden" id="contactId" value="0"/>
Run Code Online (Sandbox Code Playgroud)
此外,当我在客户端将表单添加到添加新实体时,我确保将隐藏的零初始化为零.
希望这有助于somone.
EFY
归档时间: |
|
查看次数: |
49546 次 |
最近记录: |