2017-06-29 55 views
0

当我发布一个无效的串行,其设置为“”(空字符串),我期望ModelState.isValid是false,但它返回true ..这是我的代码。.net mvc数据注释模型状态返回总是为

 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在这里是true?

+0

由于您已设置MinimumLength属性并发布空值,因此您将获得model.state = true。如果你希望它是假的,那么删除minimumlength属性。 –

+0

感谢您的评论,但它不正确 – TyForHelpDude

回答

0

沃金下面复制使用我的验证方法,并设置' - '如果它的无效序列号,这种验证错误信息是我所期望的。

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

希望这会有所帮助。我做了以下,我得到了一个“有效”为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(); 
    } 
+0

没有这不会帮助,因为它不使用我的isValidTC()方法.. – TyForHelpDude

+0

@TyForHelpDude你可以请你发布你的isValidTC()方法吗? – kblau