2014-02-18 70 views
1

我有一個包含日期時間值的輸入框(文本),出於某種原因,此輸入框在我甚至不需要它時進行驗證。當我從未要求驗證時,輸入data-val = true時強制驗證

我的模型和ViewModel根本就沒有驗證。

在我的Razor視圖頁面我有有一些輸入字段:

@Html.ValidationMessageFor(vm => vm.User.Age) 

在此輸入我嘗試輸入一些字符串,它給了我一個客戶端驗證警告:

@Html.TextBoxFor(vm => vm.User.BannedDate) 

下面是呈現下面的輸入框中輸入HTML:我使用Bootstra

<input data-val="true" data-val-date="The field BannedDate must be a date." id="User_BannedDate" name="User.BannedDate" type="text" value="27/02/2014 12:00:00 AM" class="input-validation-error"> 

p,我也有jquery。它可以自動檢測事物嗎?

更新

沒有一個全球化的標籤web.config中

在我的控制器的OnActionExecuting我設置:

System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-CA"); 
+0

視圖模型中的不可爲空的DateTime屬性將強制進行驗證是正常的。視圖模型上的DateTime屬性將要求用戶輸入一個尊重客戶端瀏覽器CultureInfo格式的值。你期望什麼? –

+0

@DarinDimitrov該字段在我的模型中可以爲空。 – loyalflow

+0

用戶是否在相應的輸入字段中輸入了某個值?如果他這樣做,他使用什麼格式?這種格式是否尊重他正在使用的日期的文化格式?例如,如果客戶端瀏覽器配置爲使用bg-BG文化信息(保加利亞語),則預計他將DateTime輸入爲「dd.MM.yyyy」。 –

回答

2

該框架自動生成這些,因爲它會嘗試將您在該文本字段中放置的任何內容綁定到支持屬性。由於BannedDate是日期並且不能接受像Tomorrow這樣的值,因此該框架確保從客戶端提交有效的日期。看看你的輸出,它不需要這些字段,只有當輸入到該字段中時,它纔是一個日期。

對於Age屬性,如果你不使用一個可空INT,你看到下列之一:

1)自動填充爲0

2)如果你使用的是可空int,它可能與BannedDate相同,因爲您必須輸入一個整數而不是32 and a half!作爲可接受的值。

如果這些自動驗證不在位,或者客戶端上的JavaScript已關閉,則在綁定期間您會收到ModelState錯誤,讓您知道該值對於這些特定字段而言不是可接受的值。