2010-12-06 24 views
3

私は開始日と終了日に検証を行う必要があり日付検証 - 開始日、終了日MVC

検証:

  • は、開始日は以下Endateに等しい値を設定する必要があります。
  • EndDateをstartdate以上に設定する必要があります。

これまでのところ私のコード:

オブジェクト:

[DisplayName("Effective Start Date")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
    public DateTime EffectiveStartDate { get; set; } 

    [DisplayName("Effective End Date")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
    public DateTime EffectiveEndDate { get; set; } 

ビュー:

</tr> 
      <tr> 
      <td class="lables"><%= Html.LabelFor(model => model.EffectiveEndDate)%></td> 
      <td class="data" id = "endDate"><%= Html.EditorFor(model => model.EffectiveEndDate)%> 
      <%= Html.ValidationMessageFor(model => model.EffectiveEndDate)%></td> 
     </tr> 
      <tr> 
      <td class="lables"><%= Html.LabelFor(model => model.ErrorCheckEnabled)%></td> 
      <td class="data" ><%= Html.TextAreaFor(model => model.ErrorCheckEnabled)%> 
      <%= Html.ValidationMessageFor(model => model.EffectiveEndDate)%></td> 
     </tr> 

どのように検証して行く必要があります。私は

$("#frm").validate 

[または]

上のクライアントのサイトで行う必要があります?

答えて

1

これは、次のように言わなければなりません。ユーザーがJavaScriptを無効にすることができるため、検証は適用されないため、常にサーバー側の検証を行う必要があります。しかし、私はクライアント側の検証を行うことをお勧めします。そうすれば、UXはより良くなります。サーバー側とクライアント側の検証は、同時に簡単に実行できます。

サーバー側では、ValidationAttributeクラスから派生して独自の検証属性を簡単に作成できます。この例を見てください:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)] 
public class EndDateAttribute : ValidationAttribute 
{ 
    public EndDateAttribute(DateTime endDate) 
    { 
     EndDate = endDate; 
    } 

    public DateTime EndDate { get; set; } 

    public override bool IsValid(object value) 
    { 
     if (value == null) 
      return false; 

     DateTime val; 
     try 
     { 
      val = (DateTime)value; 
     } 
     catch (InvalidCastException) 
     { 
      return false; 
     } 

     if (val >= EndDate) 
      return false; 

     return true; 
    } 

} 

あなたはおそらくStartDateの作り方を理解することができます。

更新:これは非常に簡単です。他の(検証)属性としてプロパティに適用するだけで済みます。たとえば、

[DisplayName("Effective Start Date")] 
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
[StartDate(DateTime.Now)] 
public DateTime EffectiveStartDate { get; set; } 

[DisplayName("Effective End Date")] 
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
[EndDate(new DateTime(2011, 9, 24)] 
public DateTime EffectiveEndDate { get; set; } 
+0

ありがとうGligoram ...上記の検証の使用方法を教えてください。 – Sreedhar

+0

私は自分の答えを編集して、検証属性の使い方を示しました。 – gligoran

+0

@gligoranこれを定数ではなく「StartDate」フィールドとどうやって比較しますか? –

関連する問題