我正在使用The Complete Guide To Validation In ASP.NET MVC 3中的示例来创建RequiredIf验证属性(它位于“更复杂的自定义验证器”标题下的页面下方约 1/3 )。除了一种情况外,这一切都很好,那就是如果我需要针对复杂类型进行验证。例如,我有以下模型:
public class MemberDetailModel
{
public int MemberId { get; set; }
// Other model properties here
public MemberAddressModel HomeAddress { get; set; }
public MemberAddressModel WorkAddress { get; set; }
}
public class MemberAddressModel
{
public bool DontUse { get; set; }
// Other model properties here
[RequiredIf("DontUse", Comparison.IsEqualTo, false)]
public string StreetAddress1 { get; set; }
}
问题是,当 StreetAddress 属性的属性验证被渲染时,它会被data-val-requiredif-other="DontUse"
. 不幸的是,由于地址是主模型的子类型,因此需要使用HomeAddress_DontUse的名称进行修饰,而不仅仅是DontUse。
奇怪的是,验证对于服务器端验证工作得很好,但是客户端不显眼的验证失败并出现 JS 错误,因为 JS 无法找到名称仅为“DontUse”的对象。
因此,我需要找到一种方法来更改 ModelClientValidationRequiredIfRule 方法,以知道它正在验证的属性是父类型的子类型,如果是这样,请将其ParentType_
添加到“otherProperty”字段(例如 otherProperty 变为HomeAddress_DontUse
.
我曾尝试typeof(MemberAddressModel)
作为属性的参数传入,但即使在调试属性创建时,我似乎也无法从该类型中找到对 HomeAddress 或 WorkAddress 的父类型的任何引用。