忽略验证

时间:2012-10-23 14:40:52

标签: c# asp.net asp.net-mvc ado.net entity-framework-4.1

我有一个包含其他两个模型的viewmodel。两者都有必需的字段(使用实体框架完成)。

    public class featureModel
    {

        public FEATURE FEATURE { get; set; }


        public REQUIREMENTS REQUIREMENTS { get; set; }
    }

在我的页面上,我有一个下拉列表,其填充方式如下

ViewBag.FEATURE_ID = new SelectList(db.FEATURE, "FEATURE_ID", "Name_");

在视图

@Html.DropDownList("FEATURE_ID", "ADD FEATURE")

这将是找到的所有功能的下拉列表,顶部是ADD FEATURE选项(当选择此选项时,我有一些js来显示用户应输入的字段)。如果选择此选项,则用户需要输入某些字段,否则不应输入(并且字段被隐藏)。当我的页面验证时,它需要填充这个,这在验证方面是有意义的。

如果下拉列表位于特定选项上,是否可以设置条件忽略此验证?

3 个答案:

答案 0 :(得分:1)

我想你想忽略隐藏字段的jquery验证。你可以试试这个。

  var validator = $("#formId").data('validator');
  validator.settings.ignore = ":hidden"; 

在服务器端清除@ {Forty-Two所说的ModelState错误

答案 1 :(得分:0)

您在ViewModel上实施System.ComponentModel.DataAnnotations.IValidatableObject并在那里执行验证:

public class featureModel : IValidatableObject
{
    public FEATURE FEATURE { get; set; }
    public REQUIREMENTS REQUIREMENTS { get; set; }
    public bool FeaturesRequired { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (featuresRequired)
        {
            // do your feature check here
            if (FEATURE == null)
            {
                yield return new ValidationResult("You must enter a feature.");
            }
        }
    }
}

在您的视图上有一个隐藏字段,为FeaturesRequired提供一个值(您可以使用javascript进行此操作,以便下载onchange),然后可以在模型验证中进行检查。

使用不显眼的ajax进行静态处理(客户端验证)

请查看this resource,以便在客户端验证IValidatableObject

答案 2 :(得分:0)

如果您在“当我的页面验证”时说您的控制器中有ModelState错误,那么您可以使用

ModelState.Clear()

清除所有错误或

ModelState.Remove(string key)

清除特定错误。您可以检查下拉列表的值,然后确定要删除的模型错误(如果有)。

修改

忽略jquery验证

$("#formId").validate({  //Your form id 
   ignore: "#ignoreFieldId"  //you can use any selector you want here: class, etc
})