asp.net-mvc - 为什么 MVC Model Binder 集需要 int、long 值?

标签 asp.net-mvc asp.net-mvc-4 data-annotations

我有一个这样的模型

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/

相关文章:

c# - ASP.NET MVC UpdateModel 意外失败

javascript - 推文按钮未添加链接 url

c# - Entity Framework 5.0 代码中第一个一对一和一对多的关系

c# - 通过 Controller Factory 注入(inject)实例

asp.net-mvc - 将最小和最大日期范围设置为 DateTime 输入

asp.net-mvc - 使用 ToExpando 方法的问题

c# - ASP.Net MVC 如何生成日期列表

c# - 基本类型的必需属性没有意义

asp.net-mvc - mvc [DataType(DataType.EmailAddress)无需验证

asp.net-mvc - 数据注释真的是验证的好主意吗?