My97DatePicker
這一套 My97DatePicker 是由對岸所發展,是一套約 60 KB 的 JavaScript,可以說,把 DatePicker 功能發展到非常「高級」的境界,而不是你所想像,跳出一個日曆,讓你選選點點。
首先,一樣,我們先準備我們的 Model、Controller \ Action、View。
Model:BlogPostMy97.vb
Imports System.ComponentModel.DataAnnotations ''' <summary> ''' Blog 發佈文章類別 ''' </summary> Public Class BlogPostMy97 ' 標題 Public Property Title() As String ' 發佈日期 <DataType(DataType.Date)> Public Property PostedOn() As DateTime ' 標籤 Public Property Tags() As String ' 內容 Public Property Content() As String End Class
Controller \ Action:BlogPostMy97Controller.vb
Namespace Mvc3HTMLEditorAndDatePicker Public Class BlogPostMy97Controller Inherits System.Web.Mvc.Controller ' ' GET: /BlogPostMy97/Create Function Create() As ActionResult Return View() End Function <HttpPost(), ActionName("Create")> Function Create_Post(model As BlogPostMy97) As ActionResult ViewBag.HtmlContent = model.Content Return View(model) End Function End Class End Namespace
View:Create.aspx
<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of Mvc3HTMLEditorAndDatePicker.BlogPostMy97)" %> <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> KKBruce : DatePicker (使用My97 Datepicker) 日期選擇器測試 </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <h2>DatePicker (使用My97 Datepicker) 日期選擇器測試</h2> <%-- The following line works around an ASP.NET compiler warning --%> <%: "" %> <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> <% Using Html.BeginForm() %> <%: Html.ValidationSummary(True) %> <fieldset> <legend>My97 Datepicker</legend> <div class="editor-label"> <%: Html.LabelFor(Function(model) model.Title) %> </div> <div class="editor-field"> <%: Html.EditorFor(Function(model) model.Title) %> <%: Html.ValidationMessageFor(Function(model) model.Title) %> </div> <div class="editor-label"> <%: Html.LabelFor(Function(model) model.PostedOn) %> </div> <div class="editor-field"> <%: Html.EditorFor(Function(model) model.PostedOn) %> <%: Html.ValidationMessageFor(Function(model) model.PostedOn) %> </div> <div class="editor-label"> <%: Html.LabelFor(Function(model) model.Tags) %> </div> <div class="editor-field"> <%: Html.EditorFor(Function(model) model.Tags) %> <%: Html.ValidationMessageFor(Function(model) model.Tags) %> </div> <div class="editor-label"> <%: Html.LabelFor(Function(model) model.Content) %> </div> <div class="editor-field"> <%: Html.EditorFor(Function(model) model.Content) %> <%: Html.ValidationMessageFor(Function(model) model.Content) %> </div> <p> <input type="submit" value="Create" /> </p> </fieldset> <% End Using %> <div> <%: Html.ActionLink("回首頁", "Index", "Home") %> </div> </asp:Content>
準備好,我們就開始來使用 My97 Datepicker 吧。
下載 My97 Datepicker 及注意事項
我們先從官網下載 My97Datepicker 4.72 Release ( 7z )版本。解壓縮後,把整個「My97DatePicker」目錄複製到專案「Scripts」目錄之下。
以下是官網上的使用注意事項:
- My97DatePicker目录是一个整体,不可破坏里面的目录结构,也不可对里面的文件改名,可以改目录名
- My97DatePicker.htm是必须文件,不可删除(4.8以后不存在此文件)
- 各目录及文件的用途:
WdatePicker.js 配置文件,在调用的地方仅需使用该文件,可多个共存,以xx_WdatePicker.js方式命名
config.js 语言和皮肤配置文件,无需引入(4.8以后合并入WdatePicker.js)
calendar.js 日期库主文件,无需引入
My97DatePicker.htm 临时页面文件,不可删除(4.8以后不存在此文件)
目录lang 存放语言文件,你可以根据需要清理或添加语言文件
目录skin 存放皮肤的相关文件,你可以根据需要清理或添加皮肤文件包- 当WdatePicker.js里的属性:$wdate=true时,在input里加上class="Wdate"就会在选择框右边出现日期图标,如果您不喜欢这个样式,可以把class="Wdate"去掉,另外也可以通过修改skin目录下的WdatePicker.css文件来修改样式
設定及使用 My97 Datepicker
引用 WdatePicker.js
<!-- My97 Datepicker --> <script src="<%: Url.Content("~/Scripts/My97DatePicker/WdatePicker.js") %>" type="text/javascript"></script>
然後呢?在解壓縮時,除了 My97DatePicker 目錄外,還有附上一頁 Demo.htm 讓我們開打看一下它的 Source Code:
<script language="javascript" type="text/javascript" src="My97DatePicker/WdatePicker.js"></script> <input class="Wdate" type="text" onClick="WdatePicker()">
我們發現,My97 DatePicker 的使用是透過 class 與 onClick 這兩個 HTML 屬性來完成。這就好辦事了。讓我們回頭修改網頁內容。
<div class="editor-field"> <%: Html.EditorFor(Function(model) model.PostedOn) %> <%: Html.ValidationMessageFor(Function(model) model.PostedOn) %> </div>
想為 PostedOn 加上 class 與 onclick 的 HTML 屬性,發現棘手了。
From MSDN:
名稱 | 描述 |
---|---|
EditorFor(Of TModel, TValue)(HtmlHelper(Of TModel), Expression(Of Func(Of TModel, TValue))) | 傳回 Expression 運算式所表示之物件中,每一個屬性的 HTML input 項目。 |
EditorFor(Of TModel, TValue)(HtmlHelper(Of TModel), Expression(Of Func(Of TModel, TValue)), Object) | 使用其他檢視資料,傳回運算式所表示之物件中每一個屬性的 HTML input 項目。 | EditorFor(Of TModel, TValue)(HtmlHelper(Of TModel), Expression(Of Func(Of TModel, TValue)), String) | 使用指定的範本,傳回 Expression 運算式所表示之物件中每一個屬性的 HTML input 項目。 |
EditorFor(Of TModel, TValue)(HtmlHelper(Of TModel), Expression(Of Func(Of TModel, TValue)), String, Object) | 使用指定的範本和其他檢視資料,傳回運算式所表示之物件中每一個屬性的 HTML input 項目。 |
EditorFor(Of TModel, TValue)(HtmlHelper(Of TModel), Expression(Of Func(Of TModel, TValue)), String, String) | 使用指定的範本和 HTML 欄位名稱,傳回 Expression 運算式所表示之物件中每一個屬性的 HTML input 項目。 |
EditorFor(Of TModel, TValue)(HtmlHelper(Of TModel), Expression(Of Func(Of TModel, TValue)), String, String, Object) | 使用指定的範本、HTML 欄位名稱和其他檢視資料,傳回運算式所表示之物件中每一個屬性的 HTML input 項目。 |
找不到可以增加 HTML屬性的地方!我們先看看 Html.EditorFor() 幫我們產生什麼 HTML 好了。
<input type="text" value="" name="PostedOn" id="PostedOn" data-val-required="PostedOn 欄位是必要項。" data-val="true" class="text-box single-line">
就是個 input,想想,還有那個擴充方法可以幫我們產生 input?好像有一個…T 什麼的,查查 MSDN。
<div class="editor-field"> <%: Html.TextBoxFor(Function(model) model.PostedOn) %> <%: Html.ValidationMessageFor(Function(model) model.PostedOn) %> </div> <!-- Html.TextBoxFor() 產生的 input --> <input type="text" value="" name="PostedOn" id="PostedOn" data-val-required="PostedOn 欄位是必要項。" data-val="true">
查詢 MSDN 後,確定這就是我們要的,它可以自己定義加上 HTML 屬性。
<div class="editor-field"> <%: Html.TextBoxFor(Function(model) model.PostedOn,New With{.class="Wdate", .onclick="WdatePicker()"}) %> <%: Html.ValidationMessageFor(Function(model) model.PostedOn) %> </div>
建置,把網頁執行起來。
圖一:My97 Datepicker - 提示圖示 |
圖二:My97 Datepicker 執行圖 |
看一下它的 input code:
<input type="text" value="" onclick="WdatePicker()" name="PostedOn" id="PostedOn" data-val-required="PostedOn 欄位是必要項。" data-val="true" class="Wdate valid">
修改日期格式
我們進入它的主程式 WdatePicker.js,前面 37 行都是在設定此 My97 Datepicker 的預設值,我們很容易就看到一個「dateFmt:"yyyy-MM-dd"」,要改為台灣習慣的日期格式,把「-」改為「/」,即「dateFmt:"yyyy/MM/dd"」。儲存,重新執行網頁。
My97 Datepicker 使用心得
官網上的 Demo 有相當清楚的說明文件,都是中文字,再說看不懂了就很 XD。例如,我想要「民國」日期而非「西元」日期,有有有,找一下「特色功能」→「民國年」就是你要的功能,很棒吧!建議你,花一些些時間去把它所有範例全部玩一次,你會發現,原來一個 Datepicker 也是很專業的地方,可不是你想像那麼簡單。
相對於前一篇 jQuery UI : DatePicker,My97 Datepicker 不需要 jQuery即可運作,但它又有不輸 jQuery UI : DatePicker 的功能性。如果以檔案大小來說,jQuery + jQuery UI + jQuery UI Datepicker VS My97 Datepicker,不用比了,My97 Datepicker "Win"。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。