Валидатор пользовательского диапазона на mvc3

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

[RequiredIfFalse("UnEquip", ErrorMessage = "Le champ 'Nombre de salariés' doit être     renseigné")]
    [Range(1, 1000000, ErrorMessage = "Le nombre de salariés doit être compris entre 1 et 1000000")]
    public int Salaries { get; set; }

что-то вроде этого, но комбинируя эти 2 типа проверки.

заранее спасибо


person user2307720    schedule 25.10.2013    source источник
comment
Является ли ваше логическое значение другим свойством или константой, определенной с помощью вашего пользовательского RangeAttribute?   -  person Réda Mattar    schedule 25.10.2013
comment
логическое значение находится в модели, это флажок в представлении.   -  person user2307720    schedule 25.10.2013


Ответы (1)


Вам нужно выполнить эту проверку на уровне модели, потому что она подразумевает сразу несколько свойств. Проверьте эту ссылку для аналогичной проблемы: Сделать поле электронной почты обязательным на основе выбора значения в раскрывающемся списке

В вашем случае Validate проверит ваше логическое значение и Salaries значение, если false и Salaries > 1000000 или Salaries < 1, вы вернете новое ValidationResult, содержащее ваше сообщение об ошибке.

person Réda Mattar    schedule 25.10.2013
comment
спасибо, это работает почти как шарм. но у меня есть небольшая проблема, когда сообщение о проверке должно появиться. Он появляется только в том случае, если у меня нет другой ошибки проверки в поле без пользовательской проверки. Я использую сводку проверки, с JQuery.validation.js мне нужно добавить некоторые изменения в validation.js, чтобы все сообщения об ошибках отображались одновременно? - person user2307720; 25.10.2013
comment
Я подозреваю, что другие ваши ошибки проверки вызваны на стороне клиента. К сожалению, проверка на уровне модели работает только на стороне сервера. В будущем это может измениться, но пока это работает :/ - person Réda Mattar; 25.10.2013
comment
Итак, я должен отключить проверку на стороне клиента или найти другой способ проверки? Я должен найти, как отключить проверку на стороне клиента и проверить это - person user2307720; 25.10.2013
comment
даже если проверка на стороне клиента отключена, проблема все еще здесь. - person user2307720; 25.10.2013
comment
Можете ли вы показать нам, как вы определяете другие правила проверки в своей модели? - person Réda Mattar; 25.10.2013
comment
вот так: [Required(ErrorMessage = "Le champ 'fonction' doit être renseigné")] public string Fonction { get; set; } для скриптов, которые я использую: jquery.validate.js jquery.validate.unobtrusive.js - person user2307720; 25.10.2013
comment
Вы пытались удалить эти ссылки на скрипты? Я не уверен, что проверка на стороне клиента действительно отключена. Кроме того, вы можете попробовать это: @{ Html.EnableClientValidation(false); } в начале вашей формы. - person Réda Mattar; 25.10.2013
comment
ну, у меня есть кое-что новое, я создал другой метод для пользовательской проверки других реквизитов. но теперь у меня есть ошибка при компиляции, говорящая, что FormModel не реализует IValidatableObject. Я пытаюсь удалить новые методы, но теперь даже первый (который работал не менее 10 раз) выдает ту же ошибку. У меня нет никакой ошибки, когда я удаляю IValidatableObject, но, конечно, пользовательская проверка не работает... я надеюсь, что это не проблема между интерфейсом, разработанным моим коллегой... - person user2307720; 25.10.2013
comment
Проверьте это: msdn.microsoft.com/fr-fr/library/ . Когда вы наследуете от IValidatableObject, вы должны реализовать метод Validate (где вы выполняете свои проверочные тесты) с подписью, указанной в этой ссылке. В противном случае он не будет компилироваться. - person Réda Mattar; 25.10.2013
comment
я посмотрю на это, спасибо, я не могу использовать этот метод на нескольких опорах с разными условиями диапазона на моей модели? - person user2307720; 25.10.2013
comment
хорошо, не обращайте внимания на мой последний вопрос, я решил его сам, протестировав. отключение проверки клиента все еще не решило проблему с сообщением, возможно, это проблема с js - person user2307720; 25.10.2013