我有一个像这样的模型
public int Id {get;set;}
[Required]
public string FirstName{get; set}
[Required]
public string LastName{get; set}
Id在DB中自动生成。当我想要调用Create Action时ModelState说“需要Id字段”!!!!我找到了this我的问题,但它没有清理解决方案。 还有其他方法可以解决这个问题吗?
我是否有办法更改值类型的Mvc ModelBinder行为?
答案 0 :(得分:8)
此问题的最佳解决方案是使用视图模型。视图模型是您专门设计的类,以满足视图的要求。因此,您的控制器操作将此视图模型作为参数。只需停止将您的域模型传递给您的视图即可。就是这样。
如果您不想遵循良好做法并使用视图模型,可以通过将以下内容添加到Application_Start
来禁用此隐式验证:
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
另一个 hack 是使用[Bind(Exclude = "Id")]
属性从绑定中排除此属性。是的,这是一个黑客,但如果你不遵循良好的做法,你将不得不忍受黑客。
答案 1 :(得分:1)
虽然@DarinDimitrov建议使用View Models的一个很好的选择,除了那个答案。另外,仅当您不想创建View-Model
ModelState["Id"].Errors.Clear();
行动方法中的Post
怎么样?
答案 2 :(得分:0)