如何在 CF Entity Framework 中指定没有客户端验证的最大字符串长度

How do I specify max string length without client-side validation in CF Entity Framework

情况

我有一个社会保障字段,上面有一个输入掩码,这样我们就可以得到:“999-99-9999”。提交表单时,该字段的值为"unmasked",表示连字符被删除。

问题

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

问题

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

我找到了正确答案 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

视图(razor 语法)

<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 属性并将其设置为 假(例如,data_val="false"
  • 我的 HTML 属性名称中的下划线在生成标记时被 ASP 自动转换为连字符。
  • data_val_maxlength_max属性(即data-val-maxlength-max属性)是模型中MaxLength(<integer>)数据注释对应的HTML属性的名称。在我的视图代码中,我在客户端将其从 9 更改为 11(并且仅在客户端)。