.net mvc 数据注释模型状态返回始终为真

Posted

技术标签:

【中文标题】.net mvc 数据注释模型状态返回始终为真【英文标题】:.net mvc data annotation model state return always true 【发布时间】:2017-12-03 09:27:11 【问题描述】:

当我发布无效序列时,它设置为“”(空字符串),我希望 ModelState.isValid 为 false,但它返回 true.. 这是我的代码。

        private string _tcno  get; set;   

        [Required(ErrorMessage = "Enter serial")]
        [StringLength(11, MinimumLength = 11, ErrorMessage="Invalid Serial Number")]
        [Column(TypeName = "nchar")]
        public string TCNO
        
            get  return _tcno ?? ""; 
            set  
                 value = value ?? ""; 
                 _tcno = value.IsValidTC() ? value : ""; 
            
        

我相信最少 11 长度的验证,为什么 ModelState.isValid 在这里是真的?

【问题讨论】:

由于您设置了 MinimumLength 属性并发布了空值,因此您将获得 model.state = true 。如果您希望它为假,则删除 minimumlength 属性。 感谢您的评论,但它不正确 【参考方案1】:

希望这会有所帮助。我做了以下操作,我得到了 12345678901 的“有效”,而 1234 得到了“无效”

查看:

@model Testy20161006.Controllers.AttributeViewModel
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>IndexValid10</title>
</head>
<body>
    <div>
        @using (Html.BeginForm())
        
            @Html.TextBoxFor(r => r.TCNO);
            <input type="submit" value="submit" />
        
    </div>
</body>
</html>

控制器/视图模型:

public class AttributeViewModel

    private string _tcno  get; set; 

    [Required(ErrorMessage = "Enter serial")]
    [StringLength(11, MinimumLength = 11, ErrorMessage = "Invalid Serial Number")]
    [Column(TypeName = "nchar")]
    public string TCNO
    
        get  return _tcno ?? ""; 
        set
        
            value = value ?? "";
            //modified this line
            _tcno = value;
        
    


public class HomeController : Controller

    [HttpPost]
    public ActionResult IndexValid10(AttributeViewModel attributeViewModel)
    
        //set a breakpoint here
        if (ModelState.IsValid)
        
            var isValid = true;
        
        return View();
    

【讨论】:

@TyForHelpDude 你能发布你的 isValidTC() 方法吗?【参考方案2】:

下面的工作副本正在使用我的验证方法,如果序列号无效,则设置“-”,这种方式验证错误消息与我预期的一样。

private string _tcno  get; set; 
        [Required(ErrorMessage = "Enter Serial")]
        [StringLength(11, MinimumLength = 11, ErrorMessage="Invalid Serial Number.")]
        [Column(TypeName = "nchar")]
        public string TCNO
        
            get  return _tcno ?? ""; 
            set 
                value = value.IsValidTC() ? value : "-";
                _tcno = value;
            
        

【讨论】:

以上是关于.net mvc 数据注释模型状态返回始终为真的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC - 以 HTML 或 XML 形式返回数据

ASP.NET MVC:如何在返回状态码 404 时提供内容? [复制]

似乎无法使用 ASP.NET MVC 和实体框架返回我的模型

Spring MVC 返回自定义 HTTP 状态码(无错误)

Asp.net Mvc action返回多个模型实体给view

如何在 asp.net mvc 5 中返回模型和参数中的另一个动作?