内置的ASP MVC验证是否可以针对同一控制器的不同操作采取不同的行为?例如,我有一个用户控制器,它具有创建,编辑和其他操作等操作。因此,在模型用户中,属性Username正在验证其唯一性。如果存在具有相同用户名的用户,则会抛出并且错误用户名已存在。因此,在编辑用户时使用相同的验证器进行编辑操作会引发错误“用户名已存在”。谁能告诉我是否有办法解决这个问题?我正在粘贴我的验证码以供参考。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace Models
{
[MetadataType(typeof(AdmiUserMetadata))]
public partial class AdminUser
{
public class AdmiUserMetadata
{
[Required(ErrorMessage = "Required Field")]
public string Id { get; set; }
[Required(ErrorMessage = "Required Field")]
[RegularExpression("[\\S]{6,}", ErrorMessage = "Must be at least 6 characters.")]
[Username(ErrorMessage = "Username already taken")]
public string Username { get; set; }
[Required(ErrorMessage = "Required Field")]
[RegularExpression("[\\S]{6,}", ErrorMessage = "Must be at least 6 characters.")]
public string Password { get; set; }
[Required(ErrorMessage = "Required Field")]
public string Name { get; set; }
[Required(ErrorMessage = "Required Field")]
[RegularExpression("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*\\.([a-z]{2,4})$", ErrorMessage ="Invalid E-mail ID")]
public string Email { get; set; }
[Required(ErrorMessage = "Required Field")]
[RegularExpression("(Active|Disabled)", ErrorMessage = "Select the status of User")]
public string Status { get; set; }
[Required(ErrorMessage = "Required Field")]
[RegularExpression("^[1-9]", ErrorMessage = "Select the group of User")]
public string Group { get; set; }
}
}
public class UsernameAttribute : ValidationAttribute
{
IUserRepository _repository = new UserRepository();
public override bool IsValid(object value)
{
if (value == null)
return true;
if (_repository.IsUsernamePresent((string)value))
{
return false;
}
return true;
}
}
}
答案 0 :(得分:0)
如果一个类具有确定验证的属性,我不知道如何做到这一点。这显然适用于大多数项目,但对我而言,这也没有成功。
如果您需要附加不同的验证规则集,请查看http://fluentvalidation.codeplex.com/。我尝试过并喜欢它。
它不处理客户端验证。我放弃了,因为我在大多数部分都有ajax调用,感觉有点像客户端验证。
答案 1 :(得分:0)
您要验证的是业务规则。
No two users can have the same username.
我会有一个用户服务,在创建/编辑时强制执行此规则。属性最适合输入验证。 (例如,整数是非负的?有效的电子邮件地址?等)