MVC3客户端验证 - 仅显示“* required”

时间:2011-03-29 06:53:06

标签: asp.net-mvc asp.net-mvc-3 data-annotations

是否有一种快速方法可以为模型中的所有字段默认错误消息?

我希望验证返回文本:

“* required”

...但不想在每个字段上手动设置它。

谢谢保罗

2 个答案:

答案 0 :(得分:3)

您可以编写自定义必需属性

[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; }
    }

答案 1 :(得分:0)

您可以创建一个新的HTML帮助程序,然后调用基础ValidationMessageValidationMessageFor帮助程序设置消息文本。

基于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的解决方案是一个很好的解决方案。