Состояние аннотации данных.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();
}