2

私のMVCアプリケーションには次のものがありますViewModel

public class MyViewModel
{
   public int StartYear { get; set; }
   public int? StartMonth { get; set; }
   public int? StartDay { get; set; }

   public int? EndYear { get; set; }
   public int? EndMonth { get; set; }
   public int? EndDay { get; set; }

   [DateStart]
   public DateTime StartDate
   {
       get
       {
           return new DateTime(StartYear, StartMonth ?? 1, StartDay ?? 1);
       }
   }

   [DateEnd(DateStartProperty="StartDate")]
   public DateTime EndDate
   {
       get
       {
           return new DateTime(EndYear ?? DateTime.MaxValue.Year, EndMonth ?? 12, EndDay ?? 31);
       }
   }
 }

この形式の日付が必要なので、カレンダー ヘルパーは使用しません (背後にロジックがあります)。ここで、カスタム検証ルールを作成しました:

    public sealed class DateStartAttribute : ValidationAttribute
    {
        public override bool IsValid(object value)
        {
            DateTime dateStart = (DateTime)value;
            return (dateStart > DateTime.Now);
        }
    }

    public sealed class DateEndAttribute : ValidationAttribute
    {
        public string DateStartProperty { get; set; }
        public override bool IsValid(object value)
        {
            // Get Value of the DateStart property
            string dateStartString = HttpContext.Current.Request[DateStartProperty];
            DateTime dateEnd = (DateTime)value;
            DateTime dateStart = DateTime.Parse(dateStartString);

            // Meeting start time must be before the end time
            return dateStart < dateEnd;
        }
    }

問題は、フォームがサーバーにポストされた後に計算されるため、DateStartProperty(この場合StartDateは ) がオブジェクトに含まれていないことです。Requestしたがって、dateStartStringは常に null です。の値を取得するにはどうすればよいStartDateですか?

4

2 に答える 2

1

この回答のようにリフレクションを使用して他のプロパティを取得するか(これは私には少しハックに思えます)、ここで説明した単一のプロパティではなく、クラスのカスタム検証属性を作成できます。

于 2012-10-29T10:21:11.343 に答える
0

このプラグインを試してください:http://docs.jquery.com/Plugins/Validation/multiplefields

これがお役に立てば幸いです〜

于 2012-10-29T10:03:57.227 に答える