Состояние аннотации данных.net mvc всегда возвращает true

Когда я публикую недопустимый серийный номер, для него устанавливается значение ""(пустая строка), и я ожидаю, что 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 : ""; 
            }
        }

Я доверяю проверке длины min 11, почему ModelState.isValid здесь верно?

2 ответа

Решение

Приведенная ниже Woking копия использует мой метод проверки и устанавливает '-', если его недопустимый серийный номер, таким образом, сообщение об ошибке 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;
            }
        }

Надеюсь, это поможет. Я сделал следующее, и я получил "действительный" для 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>

Контроллер /ViewModel:

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();
    }
Другие вопросы по тегам