1

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

    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")

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

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

4

3 回答 3

1

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

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

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

于 2012-10-23T16:58:42.703 回答
0

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

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您的下拉菜单),然后可以在模型验证中对其进行检查。

IValidatable 与不显眼的 ajax(客户端验证)

查看此资源IValidatableObject以在客户端进行验证。

于 2012-10-23T14:53:56.940 回答
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
})
于 2012-10-23T15:00:00.090 回答