根据需要治疗的ASP.NET MVC可选字段(ASP.NET MVC optional field

2019-07-03 16:09发布

我有这个字段,因为当我点击提交某种原因,获取所需的字段验证消息。

[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
}

Answer 1:

内置DefaultModelBinder在MVC将价值类型进行必要和数据类型的验证,比如说int,日期时间,小数,等等,即使你不使用像成才明确指定验证这将发生[Required]

为了使这个可选的,你必须把它定义为可空:

public double? Budget { get; set; }


Answer 2:

double是值类型。 值类型总是包含一个值,即使您没有设置一个。 这价值是它的类型的默认值(在这种情况下0.0 )。 所要求的框架所有的值类型进行处理。 解决这个问题的唯一方法是创建一个自定义的模型绑定,但不会防止模型包含默认值(因为没有办法说,它没有输入)。

所以,即使你创建一个定制绑定,当你处理你的模型,你就不能告诉,如果有人进入0 ,还是这仅仅是默认值。

因此,唯一真正的解决方案是改变使用空类型,例如您视图模型Nullable<double> (速记是double? )。



Answer 3:

你可能从改变预算doubledouble?

你也许可以尝试添加该属性控制器

BindExclude([Bind(Exclude="Budget")])以及



Answer 4:

你必须添加在Application_Start以下行(Global.asax中)

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

来源: 不需要的属性状态越来越数据-VAL要求的属性



Answer 5:

使用[NotMapped]注释,这消除流程中的要求验证你也可以使用自己的显示属性



Answer 6:

使用可空 之后属性名称。



文章来源: ASP.NET MVC optional field being treated as required