2012-08-27 84 views
6

我想讓我的MVC3,EF4項目與javascript日期選擇器一起工作,但我遇到了問題,因爲我想日期是英國格式(dd/mm/yyyy )。MVC3日期驗證使用全球化庫腳本

我花了幾個小時研究這個問題,並決定實施'全球化'庫腳本,正如我在link中看到的。

但是我在運行javascript時得到了一個Uncaught TypeError: Cannot read property 'methods' of undefined(來自$.validator.methods.date行)。我對JavaScript的知識相當有限,我發現使用'全球化'庫的所有例子都沒有提到這個錯誤,因此我非常難過。

我從我下面的視圖中顯示的相關代碼:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery-1.5.1.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.globalize/globalize.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.globalize/cultures/globalize.culture.en-GB.js")" type="text/javascript"></script> 

<link href="../../Content/themes/base/jquery.ui.all.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript"> 
    Globalize.culture("en-GB"); 
    $.validator.methods.date = function (value, element) { return this.optional(element) || Globalize.parseDate(value); } 
</script> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('.date').datepicker({ dateFormat: "dd/mm/yy" }); 
    }); 
</script> 

//SNIP 

<div class="editor-field"> 
    @Html.TextBox("Expires", Model.Expires, new { @class = "date" }) 
    @Html.ValidationMessageFor(model => model.Expires) 
</div> 

可能有人請幫我解決這個問題。

非常感謝。

回答

0

我在一段時間內沒有使用過Globalize庫,但我覺得它可能會讓你過度 - 假設你只需要en-GB的日期值,下面的Javascript/jQuery代碼就可以工作here is a fiddle)

<input type="text" class="date" placeholder="en-gb datepicker" /> 
<button id="btnGetVal">Get Value</button> 

<script type="text/javascript"> 
$(document).ready(function() { 
    /* you correctly have the date format set when initializing the datepicker */ 
    $('.date').datepicker({ dateFormat: "dd/mm/yy" }); 
    /* create an event handler for the "click" function of the button */ 
    $('#btnGetVal').on('click', function() { 
     /* event handler */ 
     var targetValue = $('.date').val(); 
     alert(targetValue); 
    }); 
}); 
</script> 

我用jQuery 2.1.0和jQuery UI 1.10.4測試這一點 - 你可能需要更新您的NuGet包都(我看你使用的是真正的老版本的jQuery,所以我承擔你或者需要支持IE8或者正在使用MVC的舊版本)

另外,你可能想要確保你初始化所有的Javascr ipt代碼在document.ready()函數內部,這樣所有函數都可以在加載時訪問(因爲在初始化datepicker()時,您的Globalize代碼無法訪問。我建議你在這裏閱讀更多:http://learn.jquery.com/using-jquery-core/document-ready/