2

我有一个这样的模型

public int Id {get;set;}

[Required]
public string FirstName{get; set}
[Required]
public string LastName{get; set}

Id 是在 DB 中自动生成的。当我想调用创建操作时,ModelState 说“需要 Id 字段”!!!!我为我的问题找到了这个,但它不是干净的解决方案。有没有其他方法可以解决这个问题?

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

4

3 回答 3

8

这个问题的最佳解决方案是使用视图模型。视图模型是您专门设计用于满足视图要求的类。所以你的控制器动作将把这个视图模型作为参数。只需停止将您的域模型传递给您的视图。而已。

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

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

另一个技巧是使用该属性将此属性排除在绑定[Bind(Exclude = "Id")] 之外。是的,这是一个 hack,但如果你不遵循良好的做法,你将不得不忍受 hack。

于 2013-06-17T08:32:34.727 回答
1

尽管@DarinDimitrov 提出了一个使用视图模型的好选择,但除了那个答案。此外,仅当您不想创建View-Model

ModelState["Id"].Errors.Clear();PostAction Method 怎么样?

于 2013-06-17T11:26:34.143 回答
0

您还可以将属性类型设置为Nullable<T>,然后在使用数据库之前手动强制执行您可能需要执行的任何必需验证。

public int? Id {get;set;}

延伸阅读

于 2017-12-05T18:17:52.587 回答