asp.net-mvc – MVC2中的REQUIRED String属性的服务器端验证实体框架4不起作用

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – MVC2中的REQUIRED String属性的服务器端验证实体框架4不起作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图让一个实体框架字符串属性的服务器端验证工作.其他服务器端验证(如数据类型验证和所需的dateTime和数字EF属性)正在工作.

这在VS 2010,.Net 4.0,MVC2 Cloud,ADO.Net实体框架.

我有问题的字符串属性映射到sql 2008,Varchar(50)不可空列.

当我尝试使用此属性的空字符串发布到我的创建操作时,我会收到以下错误.

Exception Details: System.Data.ConstraintException: This property cannot be set to a null value.

当我以空白的方式发布到动作时,我成功获取了一个必需的字段验证消息.

我已经尝试使用数据注释和ClientSideValidation,但似乎有一些ClientSideValidation在部分视图和jquery对话框中工作.

这是实体框架的原始自动生成代码.

[EdmScalarPropertyAttribute(EntityKeyProperty=false,IsNullable=false)]
[DataMemberAttribute()]
public global::System.String GradeTypeName
{
    get
    {
        return GradeTypeName;
    }
    set
    {
        OnGradeTypeNameChanging(value);
        ReportPropertyChanging("GradeTypeName");
        _GradeTypeName = StructuralObject.SetValidValue(value,false);
        ReportPropertyChanged("GradeTypeName");
        OnGradeTypeNameChanged();
    }
}

根据Action方法(CREATE或EDIT)的签名,在调用UpdateModel()方法之前或方法中可能会发生异常.内部异常是在model.designer.cs文件的下方.

_GradeTypeName = StructuralObject.SetValidValue(value,false);

我已经能够在一个简单的mvc2 Web应用程序上重现.

解决方法

我有同样的问题一段时间.我在这里找到了一个解释: http://mvcmusicstore.codeplex.com/workitem/6604.简而言之,实体的属性验证引发了异常“System.Data.ConstraintException:此属性不能设置为空值”.当您的mvc应用程序尝试将表单域绑定到相应的实体属性(称为PreBinding验证,并在提交表单时发生),则会执行此验证.由于该字段为空(因此转换为null),绑定器尝试将一个空值绑定到该属性,这违反了您的实体的属性的非空限制.

但是,如果您发布一个空白字段(不同于空,因此为空)实体验证通过(因为该属性未设置为空值),然后您可以从“必需”注释验证看到该消息,该在预绑定之后执行(它是PostBinding验证).

解决方法是使用告示您的绑定器不将空字符串转换为空的[DisplayFormat(ConvertEmptyStringToNull = false)]注释.

[required]
  [DisplayFormat(ConvertEmptyStringToNull = false)]
  public string YourStringProperty { get; set;}

希望这可以帮助!

猜你在找的asp.Net相关文章