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

Asp.net mvc .net mvc数据注释模型状态返回始终为true,asp.net-mvc,data-annotations,Asp.net Mvc,Data Annotations,当我发布一个无效序列时,它被设置为“”(空字符串),我期望ModelState.isValid为false,但它返回true。。这是我的密码 private string _tcno { get; set; } [Required(ErrorMessage = "Enter serial")] [StringLength(11, MinimumLength = 11, ErrorMessage="Invalid Serial Number")

当我发布一个无效序列时,它被设置为“”(空字符串),我期望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在这里是真的?

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

视图:


下面的Woking copy正在使用我的验证方法,如果序列号无效,则设置“-”,这样validatior错误消息与我预期的一样

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;
            }
        }

由于您已经设置了MinimumLength属性并发布空值,因此您得到的是model.state=true。如果您希望该值为false,请删除minimumlength属性。感谢您的评论,但不是这样correct@TyForHelpDude您可以发布您的isValidTC()方法吗?
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();
    }
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;
            }
        }