共用方式為


搭配使用 HTML5 和 jQuery UI Datepicker 快顯行事曆搭配 ASP.NET MVC - 第 3 部分

作者: Rick Anderson

本教學課程將教導您如何在 ASP.NET MVC Web 應用程式中使用編輯器範本、顯示範本和 jQuery UI datepicker 快顯視窗行事曆的基本概念。

使用複雜類型

在本節中,您將建立網址類別別,並瞭解如何建立範本以顯示它。

Models 資料夾中,建立名為 Person.cs 的新類別檔案,您將在其中放置兩種類型:類別 PersonAddress 類別。 類別 Person 將包含類型為 Address 的屬性。 此 Address 類型是複雜類型,這表示它不是 、 或 double 之類的 intstring 其中一個內建類型。 相反地,它有數個屬性。 新類別的程式碼如下所示:

public class Address {
    public string StreetAddress { get; set; }
    public string City { get; set; }
    public string PostalCode { get; set; }
}

public class Person {
    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Phone { get; set; }
    public Address HomeAddress;
}

在控制器中 Movie ,新增下列 PersonDetail 動作以顯示人員實例:

public ActionResult PersonDetail(int id = 0) {
     return View(GetPerson(id));
}

然後將下列程式碼新增至控制器, Movie 以使用一些範例資料填入 Person 模型:

Person GetPerson(int id) {
    var p = new Person
    {
        ID = 1,
        FirstName = "Joe",
        LastName = "Smith",
        Phone = "123-456",
        HomeAddress = new Address
        {
            City = "Great Falls",
            StreetAddress = "1234 N 57th St",
            PostalCode = "95045"
        }
    };
    return p;
}

開啟 Views\Movies\PersonDetail.cshtml 檔案,並新增檢視的 PersonDetail 下列標記。

@model Person
@{
    ViewBag.Title = "PersonDetail";
}
<h2>Person Detail</h2>
@Html.DisplayForModel()

按 Ctrl+F5 執行應用程式,並流覽至 Movies/PersonDetail

PersonDetail 視不包含 Address 複雜類型,如此螢幕擷取畫面所示。 (未顯示位址。)

[電影 jQuery] 視窗的螢幕擷取畫面,其中顯示 PersonDetail 檢視和 [識別碼]、[名字]、[姓氏] 和 [電話] 欄位。

模型 Address 資料不會顯示,因為它是複雜類型。 若要顯示位址資訊,請再次開啟 Views\Movies\PersonDetail.cshtml 檔案,並新增下列標記。

@Html.DisplayFor( x => x.HomeAddress )

現在檢視的完整標記 PersonDetail 看起來像這樣:

@model MvcMovie.Models.Person

@{
    ViewBag.Title = "PersonDetail";
}

<h2>Person Detail</h2>

@Html.DisplayForModel()
@Html.DisplayFor( x => x.HomeAddress )

再次執行應用程式並顯示 PersonDetail 檢視。 位址資訊現在會顯示:

[電影 jQuery] 視窗的螢幕擷取畫面,其中顯示具有新街地道址、城市和郵遞區號欄位的 PersonDetail 檢視。

建立複雜類型的範本

在本節中,您將建立將用來呈現 Address 複雜類型的範本。 當您為 Address 類型建立範本時,ASP.NET MVC 會自動使用它來格式化應用程式中任何位置的位址模型。 這可讓您從應用程式中的一個位置控制型別的 Address 轉譯。

Views\Shared\DisplayTemplates 資料夾中,建立名為 Address的強型別部分檢視:

[新增檢視] 視窗的螢幕擷取畫面,其中 [檢視名稱] 欄位中有 [位址],以及 [建立強型別檢視] 和 [建立為部分檢視] 方塊的刻度。

按一下 [新增],然後開啟新的 Views\Shared\DisplayTemplates\Address.cshtml 檔案。 新的檢視包含下列產生的標記:

@model MvcMovie.Models.Address

<fieldset>
    <legend>Address</legend>

    <div class="display-label">StreetAddress</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.StreetAddress)
    </div>

    <div class="display-label">City</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.City)
    </div>

    <div class="display-label">PostalCode</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.PostalCode)
    </div>
</fieldset>

執行應用程式並顯示 PersonDetail 檢視。 這次, Address 您剛才建立的 Address 範本是用來顯示複雜類型,因此顯示看起來如下:

[電影 jQuery] 視窗的螢幕擷取畫面,其中顯示 [人員詳細資料] 檢視,其中含有 [街地位址]、[城市] 和 [郵遞區號] 欄位周圍的新 [位址] 方塊。

摘要:指定模型顯示格式和範本的方式

您已瞭解您可以使用下列方法來指定模型屬性的格式或範本:

  • DisplayFormat 屬性套用至模型中的屬性。 例如,下列程式碼會導致沒有時間顯示日期:

    [DisplayFormat(DataFormatString = "{0:d}")]
    public DateTime ReleaseDate { get; set; }
    
  • DataType 屬性套用至模型中的屬性,並指定資料類型。 例如,下列程式碼會導致沒有時間顯示日期。

    [DataType(DataType.Date)]
    public DateTime ReleaseDate { get; set; }
    

    如果應用程式在Views\Shared\DisplayTemplates資料夾或Views\Movies\DisplayTemplates資料夾中包含date.cshtml範本,該範本將用來轉 DateTime 譯屬性。 否則,內建 ASP.NET 範本化系統會將 屬性顯示為日期。

  • Views\Shared\DisplayTemplates 資料夾中建立顯示範本,或名稱符合您要格式化之資料類型 的 Views\Movies\DisplayTemplates 資料夾。 例如,您看到 Views\Shared\DisplayTemplates\DateTime.cshtml 是用來轉譯 DateTime 模型中的屬性,而不需要將屬性新增至模型,也不需要將任何標記新增至檢視。

  • 在模型上使用 UIHint 屬性來指定要顯示模型屬性的範本。

  • 在檢視中明確將顯示範本名稱新增至 Html.DisplayFor 呼叫。

您使用的方法取決於您在應用程式中執行哪些動作。 混用這些方法並不常見,以取得您所需的格式設定類型。

在下一節中,您將切換齒輪,並從自訂資料的顯示方式移至自訂輸入方式。 您會將 jQuery datepicker 連結至應用程式中的編輯檢視,以提供指定日期的 Slick 方法。