【问题标题】:asp.net Core Razor CRUD - wont accept any input for Phone as validasp.net Core Razor CRUD - 不会接受任何有效的电话输入
【发布时间】:2021-05-10 23:30:32
【问题描述】:

我正在使用 Razor 页面和内置 CRUD 页面构建应用程序。我有一个使用 SQL Express 的代码优先设置,在我的 Location 表中我有一个可以为空的 int col,名为“Phone”。我的位置类非常简单

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

我的 Context 类也很简单

   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 这是电话格式,除电话号码外,其他所有内容都会保存。当我将任何内容放入 5554443333 或其他任何内容时,我得到:“值 '5554443333' 对电话无效。”从 asp 验证。如果我将电话字段留空,则其他所有内容都会正确保存。稍后我会加入一些正则表达式来处理破折号、括号和空格。我只需要帮助找到如何关闭或降低此字段的验证。

提前致谢。

【问题讨论】:

    标签: c# asp.net-core .net-core crud razor-pages


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 嗨@BrianTremelling,有关于这个案例的最新消息吗?
      • 效果很好,谢谢。我从一个人那里看到了一个教程,他说应该将 int 用于电话,但这真的让我呆了一会儿。
      • 嗨@BrianTremelling,你能说出你标记别人而不是我的原因吗?
      • 对不起,你们都是对的,但他是第一个。如果我被允许投票,我对 StackO 来说太陌生了
      • 嗨@BrianTremelling,如果你能看到时间,你会发现我先回答了这个问题。 :)
      猜你喜欢
      • 2012-05-23
      • 2018-11-13
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-22
      • 1970-01-01
      相关资源
      最近更新 更多