我有一个模型,其中两个属性使用注释设置为必需。只有当第一个属性是特定值时,我才能如何制作第二个属性?我已经能够使用JQuery使其适用于空白表单,但问题在于我使用数据预填充表单时,它不识别第一个属性的值,因此不会设置其他属性是否必需。
以下是我的View和Javascript目前所做的事情......
...
<div class="form-group">
@Html.LabelFor(x => x.Property1)
@Html.DropDownListFor(x => x.Property1, Model.Prop1Values, "", new {@class ="form-group prop1"})
@Html.ValidationMessageFor(x => x.Property1)
</div>
<div class="form-group">
@Html.LabelFor(x => x.PropDependentOnProp1)
@Html.DropDownListFor(x => x.PropDependentOnProp1, Model.Prop2Values, "", new {@class ="form-group prop2"})
@Html.ValidationMessageFor(x => x.PropDependentOnProp1)
</div>
...
<script>
$(".prop1").on("change", function() {
var selected = $(this).find(":selected").val();
if(selected == "Y"){
$(".prop2").rules('add', {
required: true
});
} else {
$(".prop2").rules('add', {
required: false
});
}
</script>
这适用于新表单,但在模型中预先填充数据时,验证更改在Property1
更改后才会生效。我试图在$(document).ready
中将类似的逻辑放在上面,但是不能改变未定义的属性&#39;设置&#39;&#34;。我找到了一个可能的解决方法here的链接,以首先实例化验证器,但这会删除我需要的其他属性的所有验证,并且不使用Html Helper方法中的验证<span>
标记。
答案 0 :(得分:0)
您可以使用验证上下文实现自己的验证属性并访问模型。以下代码来自dotnetmentors,可以让您了解如何根据需要对其进行修改
using System.ComponentModel.DataAnnotations;
namespace FirstMVC.Models
{
public class ValidLastDeliveryDate : ValidationAttribute
{
protected override ValidationResult
IsValid(object value, ValidationContext validationContext)
{
var model = (Models.Customer)validationContext.ObjectInstance;
DateTime _lastDeliveryDate = Convert.ToDateTime(value);
DateTime _dateJoin = Convert.ToDateTime(model.JoinDate);
if (_dateJoin > _lastDeliveryDate)
{
return new ValidationResult
("Last Delivery Date can not be less than Join date.");
}
else if (_lastDeliveryDate > DateTime.Now)
{
return new ValidationResult
("Last Delivery Date can not be greater than current date.");
}
else
{
return ValidationResult.Success;
}
}
}
}