如何在添加模型错误MVC后使验证消息消失?

时间:2013-12-10 17:06:38

标签: c# asp.net-mvc asp.net-mvc-4

在我看来,我有一个复选框和一个文本框,如果勾选复选框,那么我需要在文本框中填入一些文字。要做到这一点,我打电话

ModelState.AddModelError("item", "Please enter some text.");

仅当复选框返回true且文本框为空时 当我的页面重新显示时,我会收到正确的消息

@Html.ValidationMessageFor(model => model.item)

但是我希望文本在文本框中使用类型之后消失,而用户不必像使用数据注释那样点击提交。我该如何解决这个问题?

我正在使用带有实体框架5的c#Asp.net 4

2 个答案:

答案 0 :(得分:4)

ModelState.AddModelError是服务器端验证,因此在您发布到服务器之前,错误消息不会消失。

如果您需要所描述的功能,可以定义自定义验证属性并将其应用于客户端和服务器端。例如,您可以定义“RequiredIf”自定义验证属性,如果满足某个其他条件,则会生成所需的字段(在这种情况下,如果另一个属性为true):

public class RequiredIfAttribute : RequiredAttribute
    {
        private String PropertyName { get; set; }
        private Object DesiredValue { get; set; }

        public RequiredIfAttribute(String propertyName, Object desiredvalue)
        {
            PropertyName = propertyName;
            DesiredValue = desiredvalue;
        }

        protected override ValidationResult IsValid(object value, ValidationContext context)
        {
            Object instance = context.ObjectInstance;
            Type type = instance.GetType();
            Object proprtyvalue = type.GetProperty(PropertyName).GetValue(instance, null);
            if (proprtyvalue.ToString() == DesiredValue.ToString())
            {
                 ValidationResult result = base.IsValid(value, context);
                return result;
            }
            return ValidationResult.Success;
        }
    }

在global.asax中注册:

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(RequiredIfAttribute),typeof(RequiredAttributeAdapter);

然后你可以像这样使用它:

public class YourModel {
    // This is the property tied to your checkbox
    public bool YourBooleanProperty { get; set; }

    [RequiredIf("YourBooleanProperty", true)]
    public string Item { get; set; }
}

您还可以利用JQuery Validate插件执行相同的条件验证客户端。

答案 1 :(得分:2)

尝试使用jquery,将eventListener附加到字段并删除MVC添加到字段中的类CSS并隐藏验证标签