asp.net Core Razor CRUD - 不会接受 Phone 的任何有效输入

asp.net Core Razor CRUD - wont accept any input for Phone as valid

我正在使用 Razor 页面和内置的 CRUD 页面构建应用程序。我使用 SQL Express 进行了代码优先设置,在我的位置 table 中,我有一个名为 'Phone' 的可为空的 int col。我的位置 Class 非常简单

    [Column("Phone")]
    public Nullable<int>  Phone { get; set; }

我的上下文 class 也很简单

   public DbSet<Location> Location { get; set; }

我自动生成的 CRUD 编辑页面看起来像

    <input asp-for="Location.City" class="form-control" />
            <span asp-validation-for="Location.City" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Location.State" class="control-label"></label>
            <input asp-for="Location.State" class="form-control" />
            <span asp-validation-for="Location.State" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Location.Zip" class="control-label"></label>
            <input asp-for="Location.Zip" class="form-control" />
            <span asp-validation-for="Location.Zip" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Location.Phone" data-val="false" class="control-label"></label>
            <input asp-for="Location.Phone" data-val="false" class="form-control" />
            <span asp-validation-for="Location.Phone" class="text-danger"></span>
        </div>
        <div class="form-group">
            <input type="submit" value="Save" class="btn btn-primary" />

我没有看到我告诉 VS 这是一种 Phone 格式,除了 phone 数字外,其他所有内容都会保存。当我将任何内容放入 5554443333 或其他内容时,我得到:“值‘5554443333’对 Phone 无效。”来自 asp-验证。如果我将 phone 字段留空,其他所有内容都会正确保存。稍后我将放入一个小正则表达式来处理破折号、括号和空格。我只需要帮助找到如何关闭或淡化该字段的验证。

提前致谢。

因为int类型的范围是-2,147,483,648 to 2,147,483,647,而你的输入已经超出了这个范围,所以建议你使用string或者long类型。

 [Column("Phone")]
public string? Phone { get; set; }

将 phone 属性 更改为字符串并尝试使用正则表达式进行验证:

[Column("Phone")]
[RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Not a valid phone number")]
public string Phone { get; set; }