我有一个这样的模型
public int Id {get;set;}
[Required]
public string FirstName{get; set}
[Required]
public string LastName{get; set}
Id 是在数据库中自动生成的。当我想调用 Create 操作时,ModelState 说“需要 Id 字段”!!!!我找到了this对于我的问题,但它不是干净的解决方案。 还有其他方法可以解决这个问题吗?
有没有办法改变值类型的 Mvc ModelBinder 行为?
最佳答案
这个问题最好的解决方案是使用 View 模型。 View 模型是您专门为满足 View 要求而设计的类。所以你的 Controller Action 将把这个 View 模型作为参数。只需停止将您的域模型传递给您的 View 。就是这样。
如果您不想遵循良好做法并使用 View 模型,您可以通过将以下内容添加到您的 Application_Start
来禁用此隐式验证:
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
另一个 hack 是使用 [Bind(Exclude = "Id")]
属性从绑定(bind)中排除此属性。是的,这是一种黑客攻击,但如果您不遵循良好做法,您将不得不忍受黑客攻击。
关于asp.net-mvc - 为什么 MVC Model Binder 集需要 int、long 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17143001/