Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 MVC3/EF CustomValidator模型中的两个字段_Asp.net Mvc 3_Entity Framework 4.1_Data Annotations_Customvalidator - Fatal编程技术网

Asp.net mvc 3 MVC3/EF CustomValidator模型中的两个字段

Asp.net mvc 3 MVC3/EF CustomValidator模型中的两个字段,asp.net-mvc-3,entity-framework-4.1,data-annotations,customvalidator,Asp.net Mvc 3,Entity Framework 4.1,Data Annotations,Customvalidator,使用MVC3和EF4.1如何在客户端和服务器上验证视图模型中的多个字段 我有一个开始日期文本框(可以修改),我在一个隐藏字段中有原始开始日期。当用户提交表单时,我希望检查修改后的开始日期是否不超过原始开始日期的任意一侧一个月 我不知道如何使用DataAnnotation和CustomValidation实现这一点(或者我走错了路)?这是我一直从事的工作的一个例子: [MetadataType(typeof(Metadata.MyUserMetaData))] public partial cla

使用MVC3和EF4.1如何在客户端和服务器上验证视图模型中的多个字段

我有一个开始日期文本框(可以修改),我在一个隐藏字段中有原始开始日期。当用户提交表单时,我希望检查修改后的开始日期是否不超过原始开始日期的任意一侧一个月

我不知道如何使用DataAnnotation和CustomValidation实现这一点(或者我走错了路)?这是我一直从事的工作的一个例子:

[MetadataType(typeof(Metadata.MyUserMetaData))]
public partial class MyUser
{
    public System.DateTime DateOfBirth { get; set; }    
}
部分类

public class MyUserMetaData
{
    [CustomValidation(typeof(AmendedStartDate), "amendedstartdate", ErrorMessage = "Invalid date."]
    public DateTime StartDate { get; set; };

    public DateTime OriginalStartDate { get; set; };
}
自定义验证器

public class AmendedStartDate : ValidationAttribute, IClientValidatable
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        // How do I get multiple field values from object value?
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(Modelmetadata metadate, ControllerContext context)
    {
        var rule = new ModelClientValidationRule
        {
        ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()),
            ValidationType = "amendedstartdate"
        };

        yield return rule;
    }
}
public类修改开始日期:ValidationAttribute,IClientValidatable
{
受保护的重写ValidationResult有效(对象值,ValidationContext ValidationContext)
{
//如何从对象值中获取多个字段值?
}
public IEnumerable GetClientValidationRules(Modelmetadata元日期、ControllerContext上下文)
{
var规则=新ModelClientValidationRule
{
ErrorMessage=FormatErrorMessage(metadata.GetDisplayName()),
ValidationType=“修正开始日期”
};
收益率-收益率规则;
}
}

我知道我仍然需要将jQuery添加到此验证器的视图中。

在您的模型类上实现
IValidatableObject
,而不是使用数据注释-在交叉验证的场景中更简单、更清晰

如果仍要使用
ValidationAttribute
,则
IsValid
方法中有两个参数:

  • value
    表示指定属性的属性的有效值
  • context
    是验证属性的上下文。它还包含
    ObjectInstance
    ObjectType
    属性,用于访问整个模型及其类型,因此您可以强制转换实例并访问其他属性

中提出的问题有一个验证器示例,它与模型中的第二个值进行比较。这应该可以让你开始了。

谢谢你,拉迪斯拉夫。我接受了@consultorben的回答,因为我已经走上了这条路,但下次肯定会考虑你的解决方案。