2017-08-28 92 views
0

在我的ASP.NET MVC Core 1.1.1中,我有一个输入如下所示的表单,其中用户需要输入区号作为两个字符,如01,02 ... 10,11等。但是,当我通过输入地区代码(例如123)提交表单时,它仍然成功提交表单,而不强制用户输入区码作为两个字符。我可能错过了什么?使用StringLength验证属性进行模型验证

MyViewModels

... 
[Display(Name = "District"),StringLength(2)] 
public string Dist { get; set; } 
... 

@model MyProj.Models.MyViewModel 
... 
<div class="form-group"> 
    <label asp-for="Dist" class="col-md-2 control-label"></label> 
    <div class="col-md-2"> 
     <input asp-for="Dist" class="form-control" /> 
     <span asp-validation-for="Dist" class="text-danger"></span> 
    </div> 
    <div class="col-sm-pull-8">01 to 53 — district codes</div> 
</div> 
... 

注意 我使用默认ASP.NET Core Web Application模板与VS2017的最新版本的默认安装必要的引导和其他的JavaScript当一个使用这样的模板。

+0

你有添加验证客户端的JavaScript?尝试检查,在服务器(行动)是ModelState是有效的,如果无效检查,如果原因是Dist属性,如果它说无效会发生什么,你是不是在客户端验证(javascript) – dime2lo

+0

@ dime2lo我在上面的帖子中添加了一个** NOTE **来回答你的问题,其他读者也可能有这样的问题。 – nam

+1

您是否检查过模型是如何到达服务器的(如果ModelState有效)?如果它是无效的,那么问题出现在客户端。也许我错了,但你必须添加部分的JavaScript客户端验证。 '@section Scripts {} {await Html.RenderPartialAsync(“_ ValidationScriptsPartial”); } }' – dime2lo

回答

0

1 - StringLength的第一个参数是最大长度。要定义最低,你可以这样做:

[Display(Name = "District")] 
    [Required] 
    [StringLength(2, MinimumLength = 2)] 
    public string Dist { get; set; } 

或:

[Display(Name = "District")] 
    [Required] 
    [MinLength(2)] 
    [MaxLength(3)] 
    public string Dist { get; set; } 
  • 所需的属性丢失!
  • 查看

    验证脚本:

    @section Scripts { @Html.Partial("_ValidationScriptsPartial") } 
    

    控制器

    [HttpPost] 
        public IActionResult Contact(MyViewModel model) 
        { 
         if (ModelState.IsValid) 
         { ... }