我有一个包含其他两个模型的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来显示用户应输入的字段)。如果选择此选项,则用户需要输入某些字段,否则不应输入(并且字段被隐藏)。当我的页面验证时,它需要填充这个,这在验证方面是有意义的。
如果下拉列表位于特定选项上,是否可以设置条件忽略此验证?
答案 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
})