我想写一个自定义验证类,验证电子邮件尚未被使用。要做到这一点,我有一个方法来计算有问题的电子邮件地址的用户配置文件。很简单,但如果用户正在更新他们的个人资料,我需要从我提到的人数中排除他们的个人资料。因此,要做到这一点,我写了下面的方法:MVC3 Custon验证属性使用两个属性
public static bool IsEmailUnique(string email, int userprofileId)
{
int count = -1;
using (var db = new TRDataContext())
{
count = (from u in db.Userprofiles
where u.email == email &&
(userprofileId == 0 || u.userprofile_id != userprofileId)
select u).Count();
}
return count == 0;
}
这非常适用于新用户的自定义验证类,因为所有我需要做的是在为userprofile_id传递一个0。
public class EmailValidatorAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
if (value == null)
return false;
return Userprofile.IsEmailUnique(value.ToString(), 0);
}
}
像这样
[DisplayName("Email Address")]
[Required(ErrorMessage = "Required")]
[RegularExpression(EmailRegex, ErrorMessage = "Invalid email address")]
[EmailValidator(ErrorMessage = "Already in use")]
public string email { get; set; }
实现。然而,我现在需要传递到为EmailValidator是当前用户的userprofile_id。我很难找出这个问题。
任何帮助将不胜感激。
谢谢!