我有这个字段,因为当我点击提交某种原因,获取所需的字段验证消息。
[DisplayName("Total Budget:")]
public double Budget { get; set; }
@Html.EditorFor(model => model.account.Budget)
@Html.ValidationMessageFor(model => model.account.Budget)
public class Account
{
[DisplayName("Total Budget:")]
public double Budget { get; set; } //dropdown
}
内置DefaultModelBinder在MVC将价值类型进行必要和数据类型的验证,比如说int,日期时间,小数,等等,即使你不使用像成才明确指定验证这将发生[Required]
。
为了使这个可选的,你必须把它定义为可空:
public double? Budget { get; set; }
double
是值类型。 值类型总是包含一个值,即使您没有设置一个。 这价值是它的类型的默认值(在这种情况下0.0
)。 所要求的框架所有的值类型进行处理。 解决这个问题的唯一方法是创建一个自定义的模型绑定,但不会防止模型包含默认值(因为没有办法说,它没有输入)。
所以,即使你创建一个定制绑定,当你处理你的模型,你就不能告诉,如果有人进入0
,还是这仅仅是默认值。
因此,唯一真正的解决方案是改变使用空类型,例如您视图模型Nullable<double>
(速记是double?
)。
你可能从改变预算double
到double?
你也许可以尝试添加该属性控制器
BindExclude([Bind(Exclude="Budget")])
以及
你必须添加在Application_Start以下行(Global.asax中)
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
来源: 不需要的属性状态越来越数据-VAL要求的属性
使用[NotMapped]注释,这消除流程中的要求验证你也可以使用自己的显示属性