我有一个社交安全字段,上面有一个输入掩码,以便我们得到:" 999-99-9999"。提交表单时,此字段的值为"取消屏蔽",表示删除了连字符。
我的项目是用EF代码编写的,我想指定最大字符串长度为9 仅限数据库!! 我已经以客户端验证的形式一个允许最多11个字符的正则表达式。提交表单并删除连字符后,该值将为9,所有内容都将变为hunky dory。
我应该使用哪些数据注释来设置数据库中字段的最大字符串长度,同时为客户端验证指定不同的最大长度?
答案 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>
data_val="false"
)data_val_maxlength_max
属性(即data-val-maxlength-max
属性)是与模型中的MaxLength(<integer>)
数据注释对应的HTML属性的名称。在我的视图代码中,我在客户端将其从9更改为11(并且仅在客户端)。