MVC3验证基于用户角色

问题描述:

我们使用MVC3与unobstructuve验证,一切都很好;我们在服务器以及客户端上获得了自定义验证。MVC3验证基于用户角色

我们也在使用内建的asp.net 角色提供者。我们有特定的观点,我们用于不同的角色。根据登录用户的角色,某些字段(ViewModel的属性)是必需的。

我的问题是:我们如何制作一个ValidationAttribute基于角色?我们想要创建一个属性当用户是普通用户时需要;但是当用户是管理员时,我们不想让该字段成为必需字段。但我们确实想要使用相同的观点。

我知道我们能(从创建派生的类ValidationAttribute)创建一个自定义ValidationAttribute我想这将正常工作的服务器端验证。但我们真的想要验证这个客户端。

我认为我们在上面ValidationAttribute实施IClientValidatable和写一些jQuery来让Ajax调用返回到服务器,以检查登录的用户及其角色的电流。 但是这会让我们在每次特定属性更改时都会执行Ajax调用,并且登录用户不会更改。

这样做的正确方法是什么?或者我们应该为不同的登录用户创建不同的ViewModels

请让我知道,当我的上述解释没有道理时,我可以在需要时添加一些示例代码。

任何帮助表示赞赏。

感谢,

皮姆

我觉得你确实可以实现自定义ValidationAttribute也实现了IClientValidatable。但你可能只是“再利用”的客户端不显眼的要求验证:

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
     { 
      if (<your condition, e.g. if user has a certain role>) 
       yield return new ModelClientValidationRequiredRule(<error message>); 
     } 

这应该产生的输入作为RequiredAttribute标签相同的不显眼的必需的属性,但只有当你的条件得到满足。

+0

谢谢!这正是我所追求的。 – Pim 2011-05-29 23:54:59