【问题标题】:How do I specify max string length without client-side validation in CF Entity Framework如何在 CF Entity Framework 中指定最大字符串长度而无需客户端验证
【发布时间】:2016-05-13 12:24:57
【问题描述】:

情况

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

问题

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

问题

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

【问题讨论】:

  • 为什么不将其存储为整数?
  • 我必须为它做一个自定义输入字段。如果我尝试为整数设置自定义编辑器但为字符串指定验证,我认为任何验证都不会很好地工作。因为由于连字符,它将是一个字符串。不知道如何解决这个问题。
  • 一个允许两者的正则表达式怎么样 - ^\d{3}-\d{2}-\d{4}|\d{9}$
  • 我目前正在应用正则表达式^\d\d\d(?:\d\d|-\d\d-)\d\d\d\d$
  • 使用MaxLength属性...见这里msdn.microsoft.com/en-us/data/jj591583#MaxMin

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多