трябва да се валидира само минимална/максимална дължина

Използвам рамка FluentValidation в моя проект ASP.NET MVC 4 както за валидиране от страна на сървъра, така и от страна на клиента.

Има ли нативен (без хакване) начин за валидиране на дължината на низа само с максимална дължина или само с минимална дължина?

Например по този начин:

var isMinLengthOnly = true;
var minLength = 10;
RuleFor(m => m.Name)
    .NotEmpty().WithMessage("Name required")
    .Length(minLength, isMinLengthOnly);

стандартният шаблон за съобщение за грешка не трябва да бъде

'Name' must be between 10 and 99999999 characters. You entered 251 characters.

но

'Name' must be longer than 10 characters. You entered 251 characters.

И трябва да се поддържат атрибути от страна на клиента, напр. хакове като RuleFor(m => m.Name.Length).GreaterThanOrEqual(minLength) (не съм сигурен дали работи) не са приложими.


person Evgeny Levin    schedule 18.10.2013    source източник


Отговори (2)


Можеш да използваш

RuleFor(x => x.ProductName).NotEmpty().WithMessage("Name required")
            .Length(10);

за да получите съобщението

'Name' must be longer 10 characters. You entered 251 characters.

ако искате проверка за минимална и максимална дължина

RuleFor(x => x.Name).NotEmpty().WithMessage("Name required")
                    .Must(x => x.Length > 10 && x.Length < 15)
                    .WithMessage("Name should be between 10 and 15 chars");
person sree    schedule 28.01.2014

Ако искате да проверите само за минимална дължина:

RuleFor(x => x.Name).NotEmpty().WithMessage("Name required")
    .Length(10)
    .WithMessage("Name should have at least 10 chars.");

Ако искате да проверите само за максимална дължина:

RuleFor(x => x.Name).NotEmpty().WithMessage("Name required")
    .Length(0, 15)
    .WithMessage("Name should have 15 chars at most.");

Това е API документацията за втория (public static IRuleBuilderOptions<T, string> Length<T>(this IRuleBuilder<T, string> ruleBuilder, int min, int max)):

Резюме: Дефинира валидатор на дължина в текущия конструктор на правила, но само за свойства на низ. Проверката ще бъде неуспешна, ако дължината на низа е извън посочения диапазон. Гамата включва.

Параметри:

ruleBuilder: Създателят на правила, върху който трябва да бъде дефиниран валидаторът

мин:

макс.:

Параметри на типа:

T: Тип на валидирания обект

Можете също така да създадете разширение като това (използвайки Must вместо Length):

using FluentValidation;

namespace MyProject.FluentValidationExtensiones
{
    public static class Extensiones
    {
        public static IRuleBuilderOptions<T, string> MaxLength<T>(this IRuleBuilder<T, string> ruleBuilder, int maxLength)
        {
            return ruleBuilder.Must(x => string.IsNullOrEmpty(x) || x.Length <= maxLength);
        }
    }
}

И го използвайте така:

RuleFor(x => x.Name).NotEmpty().WithMessage("Name required")
    .MaxLength(15)
    .WithMessage("Name should have 15 chars at most.");
person Guillermo Gutiérrez    schedule 10.05.2017