2015-04-16 35 views
3

我有註冊表格及其包含出生日期字段。使用mvc中的模型驗證出生日期4

使用日曆選取器將其值輸入到此字段。

這些都是本領域

步驟1

enter image description here

步驟2

enter image description here

步驟3

插入值的步驟

所以在DD/MM/YYYY格式它的取值

這是出生場日期的外觀在我模型類

[DisplayName("Date of Birth")] 
[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
public Nullable<System.DateTime> Date_of_Birth { get; set; } 

這是外觀出生日期字段在我的查看文件

<div class="form-group"> 
    <div class="editor-label"> 
     @Html.LabelFor(model => model.Date_of_Birth) 
     @Html.Label("*", new { id="star" , @class = "requiredFiledCol" }) 
    </div> 
    <div class="editor-field"> 
     @Html.TextBoxFor(model => model.Date_of_Birth, "{0:dd/MM/yyyy}", new { @class = "form-control datepicker", placeholder = "DD/MM/YYYY" , maxlength="100" }) 
     @Html.ValidationMessageFor(model => model.Date_of_Birth) 
    </div> 
    </div> 

我想爲出生地的數據做客戶端驗證。當輸入字段不在此範圍內時顯示錯誤信息100>年齡> 18

我應該採取什麼方法?

+1

沒有什麼出,將做到這箱子。你需要寫你自己的驗證屬性並實現'IClientValidatable'。 [本文](http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2)給出了一個很好的指導。 –

+2

注意:您不使用EditorFor()來生成HTML5日期選擇器,所以'[DataType(DataType.Date)]'和'ApplyFormatInEditMode = true'不是必須的(它們只適用於'EditorFor()') –

+0

I希望你通過javascript初始化'datepicker'。然後,你將有幾個選項來設置'開始日期'和'結束日期',以便無需擔心驗證,您可以呈現日期選擇器 –

回答

0

爲@ Html.ValidationMessageFor和@ Html.TextBoxFor創建一個id,然後使用javascript來驗證它。在你看來做類似的事情:

@section scripts{ 
    <script> 
     $(function() { 
     if (document.getElementById("yourTextBoxID").value < 18){ 
      document.getElementById("yourValidationMessageID").value = "Can't be less than 18 years old :(" 
      } 
     }); 
    </script> 
} 
8

那麼,因爲你已經在使用數據註釋,爲什麼不建立你自己的。 做到這一點:

創建您使用的DLL類或使一個新的,並至少將下面的代碼添加到它

public class MinimumAgeAttribute: ValidationAttribute 
{ 
    int _minimumAge; 

    public MinimumAgeAttribute(int minimumAge) 
    { 
     _minimumAge = minimumAge; 
    } 

    public override bool IsValid(object value) 
    { 
     DateTime date; 
     if (DateTime.TryParse(value.ToString(),out date)) 
     { 
      return date.AddYears(_minimumAge) < DateTime.Now; 
     } 

     return false; 
    } 
} 

然後在您的視圖模型做到這一點:

[MinimumAge(18)] 
[DisplayName("Date of Birth")] 
[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
public Nullable<System.DateTime> Date_of_Birth { get; set; } 

或您的網頁,您將沒有任何問題,因爲您使用的框架將提取它。在不更改類中的ErrorMessage屬性的情況下,您將得到類似於

字段「{0}」無效。

將{0}替換爲您在模型中賦予屬性的屬性名稱或顯示名稱屬性。

希望它適合你。

沃爾特 PS:確保在控制器你做

if (ModelState.IsValid) 
{ 
.... 
} 
+0

這看起來像答案,你知道如何添加自定義錯誤信息嗎? –

+0

好的,只需要以與MinimumAgeAttribute從ValidationAttribute繼承相同的數據註釋方式添加它,您只需通過資源或硬編碼字符串值使用.net方式添加它 –