Пользовательский атрибут ValidationAttribute не работает

Я попытался создать собственный атрибут ValidationAttribute:

public class RollType : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        return false;   // just for trying...
    }
}

Затем я создал (в другом классе) -

  [RollType]
  [Range(0,4)]
  public int? Try { get; set; }

на представлении (я использую MVC) я написал:

      <div class="editor-label">
            Try:
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Try)
            @Html.ValidationMessageFor(model => model.Try)
        </div>

Проверка для «диапазона» отлично работает, но не для пользовательского!

В чем может быть проблема?


person TamarG    schedule 25.04.2012    source источник
comment
Обратите внимание, что RollTypeAttribute — рекомендуемое имя для этого класса. Вы по-прежнему можете использовать [RollType] с этим новым именем.   -  person Joe    schedule 05.03.2014


Ответы (1)


Попробуй это

public class RollType : ValidationAttribute
{
   protected override ValidationResult IsValid(object value, ValidationContext validationContext)
   {
      return new ValidationResult("Something went wrong");
   }
}

Также не забудьте проверить, допустимо ли состояние модели в коде, иначе оно не будет работать, пример

    [HttpPost]
    public ActionResult Create(SomeObject object)
    {
        if (ModelState.IsValid)
        {
            //Insert code here
            return RedirectToAction("Index");
        }
        else
        {
            return View();
        }
    }
person Tenerezza    schedule 25.04.2012
comment
Ошибка 1 «RollType.IsValid(object, System.ComponentModel.DataAnnotations.ValidationContext)»: невозможно изменить модификаторы доступа при переопределении «защищенного» унаследованного члена «System.ComponentModel.DataAnnotations.ValidationAttribute.IsValid(object, System.ComponentModel.DataAnnotations.ValidationContext) )' - person TamarG; 25.04.2012
comment
Извините, я только что исправил ошибку, она должна быть защищена, а не общедоступна, теперь она будет работать. - person Tenerezza; 25.04.2012
comment
Также, если вы хотите получить сообщение об успехе, используйте «return ValidationResult.Success;» - person Tenerezza; 25.04.2012
comment
Спасибо! Я удалил все, что делал, и начал с самого начала, использовал ваш код, и теперь он работает.. :) - person TamarG; 25.04.2012