use*_*937 7 asp.net asp.net-mvc asp.net-mvc-3
我正在使用Asp.net MVC 3,面临数据注释的验证问题,如下所示
我们在单独的库项目中维护模型,模型类层次结构如下
public class EditAlternateMailingAddressModel : BaseModel
{
public UserAddressDetails AlternateAddressDetails { get; set; }
public List<UsState> StateList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在userAddressDetails定义如下
public partial class UserAddressDetails
{
public string DeliveryLine { get; set; }
public string Zip { get; set; }
public bool IsDefaultMailingAddress { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
验证逻辑在单独的类中定义,如下所示
[MetadataType(typeof(UserAddressDetailsMetaData))]
public partial class UserAddressDetails
{
private class UserAddressDetailsMetaData
{
[Required(ErrorMessage = "Please enter address.")]
public string DeliveryLine { get; set; }
[Required(ErrorMessage = "Please enter city.")]
public string City { get; set; }
public bool IsDefaultMailingAddress { get; set;
}
Run Code Online (Sandbox Code Playgroud)
在编辑视图中,DeliveryLine,Zip依赖于IsDefaultMailingAddress,因为如果IsDefaultMailingAddress为true,则必须提供这些字段,否则请提交表单.
打开并部分提交我们正在使用jQuery的表单.
我们已经尝试过 http://andrewtwest.com/2011/01/10/conditional-validation-with-data-annotations-in-asp-net-mvc/ http://blogs.msdn.com/b/simonince/存档/ 2010/06/04 /有条件的验证功能于mvc.aspx
但是这些验证是在服务器端激活的,我们需要让它在客户端工作.
您应该创建自己的自定义 ValidationAttribute。如果您想要客户端验证,您的属性应该实现 IClientValidatable 接口,并且您应该编写自定义客户端验证器。
更新:添加了代码示例
实施验证器:
public class CustomRequiredAttribute : ValidationAttribute, IClientValidatable
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
// your validation logic here
return ValidationResult.Success;
}
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
return new[] {new CustomRequiredValidationRule (ErrorMessage)};
}
}
public class CustomRequiredValidationRule : ModelClientValidationRule
{
public RequiredIfVisibleValidationRule(string errorMessage)
{
ValidationType = "customRequire";
ErrorMessage = errorMessage;
}
}
Run Code Online (Sandbox Code Playgroud)
添加客户端验证器:
(function ($) {
$.validator.addMethod('customRequire', function (value, element) {
// your validation logic here
return true; // true if valid, otherwise false
});
$.validator.unobtrusive.adapters.add('customRequire');
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5048 次 |
| 最近记录: |