Проверка клиента MVC3 - отображается только «* обязательно» - PullRequest
3 голосов
/ 29 марта 2011

Существует ли быстрый способ по умолчанию использовать сообщение об ошибке для всех ваших полей в модели?

Я хочу, чтобы проверка вернула текст:

"* required"

... но не хочу вручную устанавливать его для каждого поля.

Спасибо, Пол

Ответы [ 2 ]

3 голосов
/ 29 марта 2011

вы можете написать свой собственный обязательный атрибут

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property,                                              AllowMultiple = true, Inherited = true)]
public sealed class AEMRequiredAttribute: ValidationAttribute
{
    private const string _defaultErrorMessage = "* required";    
    public AEMRequiredAttribute()
        : base(_defaultErrorMessage)
    {        }    
    public override string FormatErrorMessage(string name)
    {
        return String.Format(CultureInfo.CurrentUICulture, "* required", name);
    }    
    public override bool IsValid(object value)
    {
        if (value == null || String.IsNullOrWhiteSpace(value.ToString())) return false;
        else return true;
    }
}

вызовите этот атрибут, как показано ниже:

public partial class AEMClass
    {
        [DisplayName("Dis1")]
        [AEMRequiredAttribute]
        public string ContractNo { get; set; }
    }
0 голосов
/ 29 марта 2011

Вы можете создать новый помощник HTML, а затем вызвать базовые ValidationMessage или ValidationMessageFor помощники, устанавливающие текст сообщения при этом.

Что-то на основе ValidationMessageFor будет выглядеть так:

public static class HtmlHelperExtensions {
        public static IHtmlString ValidatorMessageWithMyTextFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) {
            return htmlHelper.ValidationMessageFor<TModel, TProperty>(expression, "required *");
        }
}

И вы можете добавить это к своему виду, используя

@Html.ValidatorMessageWithMyTextFor(m=>m.MyModelPropertyToValidate)

Конечно, все это работает со стороны приложения, а не со стороны модели, поэтому все зависит от того, где выхотел бы встраивать сообщения.Если это сторона модели, то решение AEM хорошее.

...