2011-11-17 57 views
2

我在MVC視圖上使用驗證。我在我的模型的其他屬性(如Required和Length)上使用了一些數據註釋,但我需要編寫一個如下所示的自定義驗證器來比較日期。自定義驗證在預期時不會觸發

$(document).ready(function(){ 

    $.validator.addMethod("enddate", function(value, element) { 
     var startdatevalue = $('.startdate').val(); 
     return Date.parse(startdatevalue) < Date.parse(value); 
    }, "End Date should be greater than Start Date."); 

}); 

我加入了「結束日期」類文本框,因此驗證。但是,預期的驗證不會觸發。在我的場景中,它應該像其他驗證器一樣點擊提交按鈕時觸發,但是,當我從文本框中失去焦點時,自定義驗證器會觸發。當其他驗證發生時,有什麼辦法可以讓自定義驗證器觸發。此外,錯誤未在驗證摘要中報告,但驗證程序觸發並將文本框的顏色更改爲紅色。

+0

提交表單時,可以調用$(form).valid()或$(form).validate()。 – Lamps

+0

我覺得有些困惑。我說剩下的驗證器已經在點擊提交按鈕後開始了。這就是我想要這個自定義驗證器的行爲。然而,事實並非如此,它正在從文本框中失去焦點。謝謝。 – spaceagestereo

+0

然後發佈您的完整代碼... – Lamps

回答

0
$(document).ready(function(){ 
    $.validator.addMethod("enddate", function(value, element) { 
    var startdatevalue = $('.startdate').val(); 
    return Date.parse(startdatevalue) < Date.parse(value); 
    }, "End Date should be greater than Start Date."); 
$('#yourformid').validate(); 
}); 

我認爲它的工作原理。

+0

這不能解決問題。請看我上面的評論。感謝您抽出寶貴時間發佈。 – spaceagestereo

0
$(document).ready(function() { 
     $.validator.addMethod("endDate", function (value, element) { 
      var startDate = $('.startDate').val(); 
      return Date.parse(startDate) <= Date.parse(value); 
     }, "* End date must be Equal/After start date"); 
    }); 

其工作代碼,我使用它

0

你可以調用$(形式).valid()或$(形式).validate()按鈕被點擊時。

$("submitbutton").click(function(){ 

if(!$(form).valid()) 
{ 
    return false; 
} 

}); 
0

審查以下文章:

http://nickstips.wordpress.com/2011/11/05/asp-net-mvc-lessthan-and-greaterthan-validation-attributes/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+NickOlsensProgrammingTips+%28Nick+Olsen%27s+Programming+Tips%29

使用的東西有沒有像:

function appendModelPrefix(value, prefix) { 
    if (value.indexOf('*.') === 0) { 
     value = value.replace('*.', prefix); 
    } 
    return value; 
} 

如果你的模型是根據另一類可能是問題。例如:MyViewModel.Person如果是這樣,則元素的名稱將如下所示:Person.Name