2016-10-13 4 views
1

Можно ли потребовать только для заданных ролей для поля модели при анотации данных?Можно ли создать атрибут свойства модели, необходимый для spesific ролей в Asp.Net MVC?

Для примера:

[Display(Name = "Kurum")] 
[Required(ErrorMessage = "Kurum Alanı Girişi Zorunludur.",Roles="user")] 
public decimal? KurumKodu { get; set; } 

Я знаю, разве параметр как Required(Roles="xxxx"), но мне интересно, есть ли другое решение по этому поводу?

Спасибо.

+1

Вы должны создать свой собственный атрибут проверки (и реализовать 'IClientValidatable' для проверки на стороне клиента) –

+0

У вас есть образцы кода? – kodcu

+0

@kodcu Пожалуйста, проверьте http://stackoverflow.com/questions/7390902/requiredif-conditional-validation-attribute – Kamo

ответ

1

Для этого вам необходимо создать собственный атрибут проверки. Ниже приведен код, который поможет вам это сделать.

 public class RequiredIfAttribute : RequiredAttribute 
     { 
      private string PropertyName { get; set; } 
      private object DesiredValue { get; set; } 

      public RequiredIfAttribute(string propertyName, object desiredvalue) 
      { 
       PropertyName = propertyName; 
       DesiredValue = desiredvalue; 
      } 

      protected override ValidationResult IsValid(object value, ValidationContext context) 
      { 
       object instance = context.ObjectInstance; 
       Type type = instance.GetType(); 
       Object proprtyvalue = type.GetProperty(PropertyName).GetValue(instance, null); 
       if (proprtyvalue.ToString() == DesiredValue.ToString()) 
       { 
        ValidationResult result = base.IsValid(value, context); 
        return result; 
       } 
       return ValidationResult.Success; 
      } 
     } 

Тогда вы должны украсить вашу собственность с этим атрибутом (читать комментарии в коде для понимания)

 public class User 
     { 
      /// <summary> 
      /// Gets or Sets Usertype. 
      /// </summary> 
      public string UserType { get; set; } 

      /// <summary> 
      /// Gets or Sets KurumKodu. 
      /// Here "Usertype" is property. In that you have to assign current user's role. 
      /// "user" is constant role. If "UserType" has value as "user" then this will be required. 
      /// </summary> 
      [RequiredIf("UserType", "user", ErrorMessage = "It is required")] 
      public decimal KurumKodu { get; set; } 
     } 

Если вы хотите добавить на стороне клиента проверки (ненавязчивый), то, пожалуйста, см. ниже ссылку.

RequiredIf Conditional Validation Attribute

-2

Я пробовал различные подходы, но я пришел к этой точке, что лучшее место, чтобы сделать это на виду. Что-то вроде:

@if (User.IsInRole("SystemAdministrator")) 
    { 
    <td>@Html.DisplayFor(model => model.KurumKodu)</td> 
    } 
+0

OP нуждается в условной проверке, и это не имеет к этому никакого отношения (его даже не создание элемента управления формой). –

+0

условная проверка для отображения свойства, и этот фрагмент кода делает то же самое. Даже не создавая элемент управления формой? Что именно вы имеете в виду? – Hadee

+0

Задать вопрос. OP, для чего требуется свойство (т. Е. Оно должно иметь значение при редактировании в форме) на основе роли пользователя (а проверка не имеет ничего общего с _showing property_ - его для проверки значения свойства встречается условие) –

0

Вы можете использовать

HttpContext.Current.User.IsInRole("USER_ROLE") 

в пользовательской проверки атрибутов класс