2013-04-18 61 views
2

我是一個asp.net jquery和html5的初學者,我正在開發一個asp.net mvc 4網站,我有一個帶有兩個日期字段的窗體。我不想手動插入日期,所以我試圖用這個解決方案來實現一個簡單的日期選擇器:ASP.NET MVC 4不工作與jQuery的日期選擇器

 <fieldset> 
    <legend>RangeDateViewModel</legend> 
    <div class="editor-label"> 
     Start Date 
    </div> 
    <div class="editor-field"> 
     @Html.TextBoxFor(model => model.StartDate, new{ @class = "date" }) 
     @Html.ValidationMessageFor(model => model.StartDate) 
    </div> 

    <div class="editor-label"> 
     End Date 
    </div> 
    <div class="editor-field"> 
     @Html.TextBoxFor(model => model.EndDate, new{ @class = "date" }) 
     @Html.ValidationMessageFor(model => model.EndDate) 
     </div> 

     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 


    } 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

@section Scripts { 
@Scripts.Render("~/bundles/jqueryval") 

@Scripts.Render("~/bundles/jqueryui") 
@Styles.Render("~/Content/themes/base/css") 

<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.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $(".date").datepicker(); 
    }); 
</script> 
} 

代碼工作不錯,但如果我選擇從13日日起至30/31次的這個月我總是有同樣的警告:「字段StartDate必須是日期。」和「字段EndDate必須是日期。」

編輯: 添加我的視圖模型作爲問:

public class RangeDateViewModel 
{ 
    public DateTime StartDate { get; set; } 

    public DateTime EndDate { get; set; } 

} 
+0

根據HTTP方法的不同,反序列化存在差異。如果你正在使用GET,一個活頁夾將使用_invariant culture_來綁定參數,並且如果你正在使用POST,活頁夾將使用_current culture_ – hazzik

+0

我沒有看到你的評論@hazzik,對不起。我使用POST。好的,我該怎麼做才能解決這個問題? :) – antedesk

+0

您需要設置日期格式,這將反映您在ASP.NET應用程序中的當前文化,如答案中所述。 – hazzik

回答

7

你需要告訴你不使用一個月的第一個日期格式的DatePicker:

$.datepicker.setDefaults({ 
    dateFormat: "dd/mm/yy" 
}); 

然而,這可能不是你問題的一個重要部分(並且根據你的瀏覽器文化,日期選擇器可能已經使用了第一天的日期格式)。

第一天的日期格式和jQuery validation以及MVC binding也有問題。這是我堅持使用year first date format (yyyy-mm-dd)的主要原因之一,因爲它可以被所有各種庫正確解析。

+0

埃姆抱歉,以下愚蠢的問題(我是一個新手),但我如何更改我的代碼?因爲我嘗試使用你的代碼,我沒有使用datepicker;我試圖寫$(「。date」)。datepicker(); $ .datepicker.setDefaults({date:{dd/mm/yyyy' });並沒有工作(總是相同的警報)。對不起 – antedesk

+1

datepicker使用'y'代表2位數字,'yy'代表4位數字。 – hazzik

+0

@antedesk - 你的模特是什麼樣的?你可以添加到你的問題? –

1

JQuery是一個選項,但您可以採用.NET方法。我認爲StartDate和EndDate來自ViewModel並且是DateTime類型?

只需使用@Html.EditorFor intend @Html.TextBoxFor並立即將您的控件轉換爲DatePickers。

您還可以通過在您的ViewModel DateTime上指定數據註釋屬性來設置關於日期如何顯示和操作的特定規則。例如,這可能是你的起始日期視圖模型屬性:

[DisplayFormat(NullDisplayText = "", DataFormatString = "{0:d}")] 
[Display(Name = "Start Date")] 
public DateTime? StartDate{ get; set; } 

不知道如何格式化用C#進一步您的日期選擇器?沒問題,繼續使用JQuery:

$(':input[data-datepicker]').datepicker({ dateFormat: 'dd/mm/yy' }); 
+0

這並不回答他的問題,但我完全同意並喜歡MVC中的編輯器/顯示模板。 Antedesk,你可能想檢查一下,以節省你一些時間:D – Tony

+0

第二個想法,我沒有解決它。我提供了幾種不同的方式來正確格式化DateTime。可能你在我的一些編輯之前提出了一些建議:) – Shenaniganz

+0

在你的編輯中,不是最初:)我upvoted這個,因爲你提供了答案和MVC的正確模式來處理這種情況:D鏈接更多信息:http:// www .growingwiththeweb.com/2012/12/aspnet-mvc-display-and-editor-templates.html – Tony