我創建了一個簡單的自定義驗證,以使進入確認時間爲12小時格式和文字輸入有一個'99:99' 掩模組,因此我將獲得:ASP.NET MVC自定義驗證
12 :00
驗證工作在服務器上的偉大:
private ValidationResult ValidateTwelveHourFormat(string time, ValidationContext validationContext)
{
if (String.IsNullOrWhiteSpace(time.Substring(0, 1))
|| Convert.ToInt32(time.Substring(0, 1)) > 1
|| Convert.ToInt32(time.Substring(1, 1)) > 2
|| Convert.ToInt32(time.Substring(3, 1)) > 5)
{
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
}
return ValidationResult.Success;
}
但是,客戶端不行爲方式上相同的驗證我希望:
$.validator.unobtrusive.adapters.addSingleVal('timeformat', 'format');
$.validator.addMethod('timeformat', function (value, element, timeformat) {
if (value) {
if (timeformat == "TwelveHour") {
if (value.toString().substring(0, 1) == ""
|| value.toString().substring(0, 1) > 1
|| value.toString().substring(1, 1) > 2
|| value.toString().substring(3, 1) > 5) {
return false;
}
}
}
return true;
});
客戶端將僅正確驗證第一個數字。所以如果我輸入了3,它會觸發很好,但不適用於字符串中的任何其他位置。我在那裏扔了一些警報,當我在文本中輸入一個字符時,它似乎觸發了這個方法。這種行爲令我感到困惑,因爲我認爲在表單首次提交之前這種情況並沒有發生,只有在此之後。否則,用戶會在第一次進入窗體時看到錯誤消息,我不認爲使用驗證方式的瀏覽器通常可以正常工作。
1.)爲什麼客戶端不能正確驗證其他字符位置?
2.)客戶爲什麼在表單尚未提交時進行驗證?
更新
1)我用JavaScript的SUBSTR(),因爲它的作用就像C#的String.Substring()。
對於問題2 - 我在mvc框架中使用了Data Annoations。假設我有一個被設置爲必需的字段。當我第一次輸入該表單時,該字段不會觸發模糊驗證。我可以輸入廢話,刪除垃圾,但不會觸發驗證。這就是我困惑的原因。這似乎與默認行爲有所不同。我會認爲,在提交嘗試嘗試之後會觸發驗證,就像我提到的示例一樣。
JavaScript有'substr'雖然 – Esailija
@Esailija他的代碼正在使用'String。substring()',所以我只是解釋爲什麼它不像他期望的那樣工作。檢查鏈接。 –
嗯,我只是想把它放在那裏,你可以建議他,而不是試圖找出什麼末尾索引必須在'substring' – Esailija