为什么MVC模型Binder集需要int,long值?

M.A*_*zad 2 asp.net-mvc data-annotations asp.net-mvc-4

我有一个像这样的模特

public int Id {get;set;}

[Required]
public string FirstName{get; set}
[Required]
public string LastName{get; set}
Run Code Online (Sandbox Code Playgroud)

Id在DB中自动生成.当我想要调用Create Action时ModelState说"需要Id字段"!!!! 我找到了这个问题,但它不是干净的解决方案.还有其他方法可以解决这个问题吗?

有没有办法改变值类型的Mvc ModelBinder行为?

Dar*_*rov 8

解决此问题的最佳方法是使用视图模型.视图模型是您专门设计的类,以满足视图的要求.因此,您的控制器操作将此视图模型作为参数.只需停止将您的域模型传递给您的视图即可.而已.

如果您不想遵循良好实践并使用视图模型,可以通过向您的以下内容添加以下内容来禁用此隐式验证Application_Start:

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
Run Code Online (Sandbox Code Playgroud)

另一个hack是使用该[Bind(Exclude = "Id")] 属性从绑定中排除此属性.是的,这是一个黑客,但如果你不遵循良好的做法,你将不得不忍受黑客攻击.