2

好吧,伙计们,我正在努力解决这个问题。我在 MVC4 和 jQuery 中使用验证插件找到了香草表单验证(突出显示文本框并显示红色文本)的示例,但是,在尝试执行自定义样式的内容时,它们并没有太大帮助。

例如,在 ajax 表单中,当用户提交表单并且参数错误(在发布后的控制器中)时,我想在页面上显示一个自定义 HTML 元素 - 一个包含文本的 div,这样我就可以为我的网站设置适当的 div 样式。

在我寻找答案的过程中,我发现了 ModelState.AddModelError() - 如果您只想显示文本而不是 div,这很好,因为它只是在我可以设置样式的页面中添加了一个,但是我需要的不仅仅是a 出现。

有没有人有任何好的演示/例子?

我添加了一个简单的示例图像,如果密码不正确,我想在右侧显示消息(html 和 css 的组合):

在此处输入图像描述

4

2 回答 2

1

在您的视图中,您可以使用 ValidationMessageFor 并添加一些类。要使用它,请确保您使用 AddModelError 指定了正确的属性名称,或者您在类中结合使用了元数据验证TryValidateModel()

查看代码:

@Html.ValidationMessageFor(model => model.PropertyX, null, new { @class ="error-propertyx" })

验证模型代码:

[Required(ErrorMessageResourceName = "RequiredField", ErrorMessageResourceType = typeof(ValidationRes))]
public string PropertyX { get; set; }

或者,如果您想要更多涉及的内容,您可以使用以下方法

http://buildstarted.com/2010/09/14/creating-your-own-modelmetadataprovider-to-handle-custom-attributes/

创建单独的扩展方法也是一种选择,请注意,这不是最优化的代码,但它会做你想做的:)

public static MvcHtmlString CustomValidatioMessageFor<TModel, TProperty>(this HtmlHelper obj, Expression<Func<TModel,TProperty>> expression){

    string html = (string)obj.ValidationMessageFor(expression);
    html = "<div>" + html + "</div>";
    return new MvcHtmlString(html);
}
于 2012-11-13T15:00:21.033 回答
-1
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public sealed class CCompareAttribute : ValidationAttribute, IClientValidatable
    {
        private const string _defaultErrorMessage = "Confirm password should match with password field.";
        private readonly int _minCharacters = Membership.Provider.MinRequiredPasswordLength;
        private string name;

        public CCompareAttribute(string compare)
            : base(_defaultErrorMessage)
        {
            name = compare;
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture, ErrorMessageString);
        }

        public override bool IsValid(object value)
        {
            string valueAsString = value as string;
            return (valueAsString != null);
        }

        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            return new[]{
            new ModelClientValidationEqualToRule(FormatErrorMessage(metadata.GetDisplayName()),name)
        };
        }
    }




    [AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = false)]
    public class TypeErrorMessageAttribute : Attribute
    {
        public string ErrorMessage { get; set; }
        public string ErrorMessageResourceName { get; set; }
        public Type ErrorMessageResourceType { get; set; }

        public TypeErrorMessageAttribute()
        {
        }

        public string GetErrorMessage()
        {
            PropertyInfo prop = ErrorMessageResourceType.GetProperty(ErrorMessageResourceName);
            return prop.GetValue(null, null).ToString();
        }
    }
于 2014-08-19T10:55:43.217 回答