Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 893031
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 15, 20262026-05-15T14:09:16+00:00 2026-05-15T14:09:16+00:00

I have the following ValidationAttribute class [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] public

  • 0

I have the following ValidationAttribute class

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public sealed class DateValidationAttribute : ValidationAttribute
{
    public DateValidationAttribute(string leftDateProperty, CompareOperator compareOperator, string rightDateProperty, string errorMessage)
            : base(errorMessage)
    {
        LeftDateProperty = leftDateProperty;
        Operator = compareOperator;
        RightDateProperty = rightDateProperty;
    }
    ...
    ...
}

It takes two date property names and an operator in the constructor.

In the validation method the result of the statement LeftDate Operator RightDate is returned.

public override bool IsValid(object value)
{
    DateTime leftDate;
    DateTime rightDate;

    // Get all properties on the view model
    PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value);

    DateTime rightDate = (DateTime)properties.Find(RightDateProperty, true).GetValue(value);
    DateTime leftDate = (DateTime)properties.Find(LeftDateProperty, true).GetValue(value);

    // Perform rule check
    switch (Operator)
    {
        case CompareOperator.Equal:
            return leftDate.Equals(rightDate);
        case CompareOperator.Greater:                    
            return leftDate > rightDate;
        case CompareOperator.Lesser:                    
            return leftDate < rightDate;
        case CompareOperator.GreaterOrEqual:                    
            return leftDate >= rightDate;
        case CompareOperator.LesserOrEqual:                    
            return leftDate <= rightDate;
        default:
            return false;
    }
}

Because this is an AttriuteTargets.Class attribute I know it is impossible for the framework to know which property that is causing the validation to fail. But I know that it is Left Date Property that is failing and therefore I want to set the Id of the error in the modelstate to this property. The reason for this is that I want the failing field to be marked in the form.

Question: How can I modify the error item added to the error collection in ModelState so that its id corresponds to a specific field in the form?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-15T14:09:17+00:00Added an answer on May 15, 2026 at 2:09 pm

    I found a better way of doing this using IDataErrorInfo

    Here is how I’m doing it. It’s not that generic as the example in the question. With this solution you have to code each check. But now the validation will work nice all the way up to the javascript and highlighting of the failing input element.

    public class TestModel: IDataErrorInfo
    {
    
        public TestModel()
        {
        }
    
        [Required]
        public string StartDate { get; set; }
    
        [Required]
        public string EndDate { get; set; }
    
        #region IDataErrorInfo Members
    
        public string Error
        {
            get
            {
                return string.Empty;
            }
        }
    
        public string this[string columnName]
        {
            get
            {
                switch (columnName)
                {
                    case "StartDate":
                        {
                            if (StartDate < DateTime.Today)
                            {
                                return "Start date must not be a date in the past";
                            }
                            break;
                        }
                    case "EndDate":
                        {
                            if (EndDate < StartDate)
                            {
                                return "End date must not be a date before start date";
                            }
                            break;
                        }   
                    default:
                        return string.Empty;
                }
                return string.Empty;
            }
        }
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 446k
  • Answers 446k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer The epilogue and prologue of a function are simply the… May 15, 2026 at 7:22 pm
  • Editorial Team
    Editorial Team added an answer I don't beleive you could change this behaviour without creating… May 15, 2026 at 7:22 pm
  • Editorial Team
    Editorial Team added an answer You need just a slight change, like this: var allitemorder… May 15, 2026 at 7:22 pm

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.