如何在CF实体框架

时间:2016-02-04 03:04:56

标签: asp.net-mvc vb.net entity-framework ef-code-first data-annotations

情况

我有一个社交安全字段,上面有一个输入掩码,以便我们得到:" 999-99-9999"。提交表单时,此字段的值为"取消屏蔽",表示删除了连字符。

问题

我的项目是用EF代码编写的,我想指定最大字符串长度为9 仅限数据库!! 我已经以客户端验证的形式一个允许最多11个字符的正则表达式。提交表单并删除连字符后,该值将为9,所有内容都将变为hunky dory。

问题

我应该使用哪些数据注释来设置数据库中字段的最大字符串长度,同时为客户端验证指定不同的最大长度?

1 个答案:

答案 0 :(得分:0)

我找到了正确答案here。您可以通过更改编辑器控件中的相应HTML属性来禁用客户端验证(例如,@Html.EditorFor()@Html.TextboxFor()等)。请参阅下面的示例:

使用上面的代码优先示例,我们将要为社会安全号码创建一个字段。在此字段中,我们希望客户端验证仅使用我们的正则表达式,我们希望该字段是必需的,并且我们希望数据库中的数据类型为nvarchar(9)。这是我的工作代码:

模型

<Display(Name:="Social Security Number", ShortName:="SSN", Description:="Employee social security number."),
            RegularExpression("^\d\d\d(?:\d\d|-\d\d-)\d\d\d\d$", ErrorMessage:="Please enter a valid social security number."),
            StringLength(11, MinimumLength:=9, ErrorMessage:="The social security number must be no more than 9 characters long."),
            MaxLength(9)>
        Public Property ssn As String

查看(剃刀语法)

<div class="form-group">
     @Html.LabelFor(Function(model) model.ssn, htmlAttributes:=New With {.class = "control-label col-md-2"})
     <div class="col-md-10">
         @Html.EditorFor(Function(model) model.ssn, New With {.htmlAttributes = New With {.class = "form-control", .data_val_maxlength_max = "11"}})
         @Html.ValidationMessageFor(Function(model) model.ssn, "", New With {.class = "text-danger"})
     </div>
 </div>

说明

  • 您可以完全关闭许多验证 找到具有布尔值的正确HTML属性并将其设置为 false(例如data_val="false"
  • 生成标记时,HTML属性名称中的下划线将由ASP自动转换为连字符。
  • data_val_maxlength_max属性(即data-val-maxlength-max属性)是与模型中的MaxLength(<integer>)数据注释对应的HTML属性的名称。在我的视图代码中,我在客户端将其从9更改为11(并且仅在客户端)。