2012-07-09 116 views
2

我不知道为什么我的验证不工作,如果我尝试使用整数AdditionalField。mvc远程验证

这里是我的代码(代码的某些部分被省略):

型号

public class PersonViewModelBase 
    { 
    public int PersonID { get; set; } 

    [Required] 
    [StringLength(15, MinimumLength = 3)] 
    [Remote("Checkusername", "Utilities", AdditionalFields = "PersonID")] 
    [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed.")] 
    public string UserName { get; set; } 

    public string Password { get; set; } 
    public string LastName { get; set; } 

控制器(远程)

public JsonResult Checkusername(string username, int PersonID) 
    { 
     //var user = studentRepository.GetStudents() 
     // .Where(a => a.UserName == username.Trim()) 
     // .Where(b => b.PersonID != personID);    
     var user = studentRepository.GetStudents().Where(a => a.UserName == username.Trim()); 
     if (user.Count() > 0) 
     { 
      return Json(string.Format("{0} is not available.", username), 
       JsonRequestBehavior.AllowGet); 
     } 
     else 
     { 
      return Json(true, JsonRequestBehavior.AllowGet); 
     } 
    } 

此远程验证不会被调用。但是,如果我尝试将附加字段更改为字符串,应用程序将调用远程验证,尽管由于PersonID是整数而变成“未定义”

回答

2

AdditionalFields选项仅向您的操作发送字符串,因此您需要接受它作为一个字符串,然后手动将其转换为整数。

public JsonResult Checkusername(string username, string PersonID) 
{ 
    int personID = Convert.ToInt32(PersonID); 

    var user = studentRepository.GetStudents() 
     .Where(a => a.UserName == username.Trim()) 
     .Where(b => b.PersonID != personID); 

    //var user = studentRepository.GetStudents().Where(a => a.UserName == username.Trim()); 
    if (user.Count() > 0) 
    { 
     return Json(string.Format("{0} is not available.", username), 
      JsonRequestBehavior.AllowGet); 
    } 
    else 
    { 
     return Json(true, JsonRequestBehavior.AllowGet); 
    } 
} 
0

不,这是不是这样,我们不能采取我们在模型中的额外领域。 解决的办法是采取任何其他场像隐藏比分配在箱子值=是PersonID的属性,在控制器收到此值等

查看

<input type = "hidden" value = "PersonID " id = hiddenID> 

模型

[Remote("Checkusername", "Utilities", AdditionalFields = "hiddenID ")] 

控制器

public JsonResult Checkusername(string username, string hiddenID) 
{ 
    //your code 
}