MVC日付フォーマットの2つの方式

4865 ワード

DateTimeタイプのプロパティを含むクラスがあるとしますが、編集時にJoinTimeを所望のフォーマットで表示するにはどうすればいいですか?
using System;
using System.ComponentModel.DataAnnotations;

namespace MvcApplication1.Models
{
    public class Employee
    {
        public DateTime? JoinTime { get; set; }
    }
}
 
HomeController:
using System;
using System.Web.Mvc;
using MvcApplication1.Models;

namespace MvcApplication1.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View(new Employee(){JoinTime = DateTime.Now});
        }

    }
}
 
ホームでcshtml強タイプビュー:
@model MvcApplication1.Models.Employee

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index</h2>

@Html.EditorFor(model => model.JoinTime)
 
方式1:符号化
Views/Shared/EditorTemplatesでDateTimeを作成します.cshtml強タイプ部分ビュー、ToString()でフォーマット:
@model DateTime?
@Html.TextBox("", Model.HasValue ? Model.Value.ToString("yyyy-MM-dd") : "", new {@class = "date"})
 
方式2:ViewData経由.TemplateInfo.FormattedModelValue
[DisplayFormat(DataFormatString="{0:yyyyy-MM-dd}"...]属性がDateTimeタイプの属性にヒットした場合、ビューページでViewDataを通過することができます.TemplateInfo.FormatedModelValueは、このタイプのプロパティフォーマットの表示を取得します.
using System;
using System.ComponentModel.DataAnnotations;

namespace MvcApplication1.Models
{
    public class Employee
    {
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        public DateTime? JoinTime { get; set; }
    }
}
 
Views/Shared/EditorTemplatesでDateTimeを作成します.cshtmlの強いタイプの部分ビューは、ViewDataを通ります.TemplateInfo.FormatedModelValueフォーマットの日付タイプのプロパティ.
@model DateTime?
@Html.TextBox("", Model.HasValue ? @ViewData.TemplateInfo.FormattedModelValue : "", new {@class="date"})