iT邦幫忙

0

DateTime無法顯示值一問

各位先進好,小弟剛學MVC又遇到問題了~DateTime無法顯示值~簡要程式碼如下:
Controllers

        public ActionResult ShowConferenceDetail(int ConferenceId)
        {
            Conference Data = conferenceService.GetConferenceDetail(ConferenceId);
            return View(Data);
        }
                public Conference GetConferenceDetail(int ConferenceId)
        {
            return db.Conferences.Find(ConferenceId);
        }

Model

    [Table("Conference")]
    //定義Conference資料表的驗證
    //在Model裡使用MetadataType,來預防外加的metadata屬性因為更新而被清掉
    [MetadataType(typeof(ConferenceMetadata))]
    //新增Conference資料表的部份類別,主的是為了定義Conference資料表的驗證
    //另外為 Entity 建立 Partial Class 以建立 MetaData Class
    public partial class Conference
    {
        public class ConferenceMetadata
        {
            [Key]
            public int ConferenceId { get; set; }
            [Required]
            [Display(Name = "研討會名稱")]
            public string ConferenceTitle { get; set; }
            [Display(Name = "研討會簡稱")]
            public string ConferenceAbbrev { get; set; }
            [Display(Name = "研討會地點")]
            public string ConferenceLocation { get; set; }
            [Display(Name = "連絡人姓名")]
            [StringLength(50, ErrorMessage = "名字不可超過50字元")]
            public string ContactName { get; set; }
            [Display(Name = "連絡人Email")]
            [DataType(DataType.EmailAddress)]
            public string ContactEmail { get; set; }
            [Display(Name = "研討會簡介")]
            public string ConferenceIntro { get; set; }
            [Display(Name = "研討會描述")]
            public string ConferenceDescription { get; set; }

            [DisplayName("開始日期")]
            [DataType(DataType.Date)]
            public DateTime StartDate { get; set; }

            [DisplayName("結束日期")]
            [DataType(DataType.Date)]
            //[DisplayFormat(DataFormatString = "{0:yyyy/MMM/dd}")]
            public DateTime EndDate { get; set; }
            [DisplayName("建立日期")]
            public DateTime CreateTime { get; set; }
            public DateTime LastUpdate { get; set; }
            public bool Enabled { get; set; }
            public string Locale { get; set; }
        }
    }

View

<h2>研討會內容</h2>

<div>
    <hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.ConferenceTitle)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.ConferenceTitle)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.ConferenceAbbrev)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.ConferenceAbbrev)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.ConferenceLocation)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.ConferenceLocation)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.ContactName)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.ContactName)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.ContactEmail)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.ContactEmail)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.ConferenceIntro)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.ConferenceIntro)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.ConferenceDescription)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.ConferenceDescription)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.StartDate)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.StartDate)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.CreateTime)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.CreateTime)
        </dd>


    </dl>
</div>
<p>
    @Html.ActionLink("回上一頁", "GetConferenceList")
</p>

顯示結果:

其它值都有顯示,就DateTime欄位無顯示,在進入Detail頁面時的清單畫面DateTime欄位是可以正常顯示的,不知道該從何處下手除錯,再麻煩前輩們指點一下~謝謝~

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
舜~
iT邦高手 1 級 ‧ 2019-05-22 09:08:54

您可以選擇不使用Html.DisplayFor
@Model.CreateTime.Value.ToString("MM/dd/yyyy")

或是在您的model加上
[DataType(DataType.Date)]
public DateTime? CreateTime { get; set; }

參考
https://stackoverflow.com/questions/28114874/html-displayfor-dateformat-mm-dd-yyyy

https://blog.csdn.net/ycwol/article/details/41961769

leo226 iT邦新手 4 級 ‧ 2019-05-22 10:35:31 檢舉

謝謝,測試使用第一個建議是可以的,第二個建議也是我原本就使用的方式,使用@Html.DisplayFor(model => model.StartDate)(但無法正確顯示值)
所以請教一下,是DateTime無法使用DisplayFor方式程現所造成的問題嗎?
我有看您給的參考連結,但還是看不出真正的問題是什麼~
感謝了~

leo226 iT邦新手 4 級 ‧ 2019-05-22 10:46:49 檢舉

另外想要請教model與ViewModel問題,就我Conference這個資料表存取可能會在多個頁面使用,所以依建議我需要每個頁面都建一個ViewModel來存取使用嗎?
我在進入Detail畫面時有建一個會議清單列表,所使用的ViewModel如下

    public class ConferenceViewModel
    {
        //搜尋欄位
        [DisplayName("搜尋:")]
        public string Search { get; set; }
        //注意喔!不要在 ViewModel 類別裡加入行為,或是加入 repository or service,這是因為 ViewModel 只是給 View 使用,只是作為資料的傳遞,不希望因為 ViewModel 裡有行為或是可操作資料存取或是商業邏輯操作的媒介出現在 View 裡,這是避免 View 也做資料處理或是流程控制的動作
        //顯示資料陣列
        public List<Conference> DataList { get; set; }
        //分頁內容
        public ForPaging Paging { get; set; }
    }

由於進入Detail需存取大多數Conference的欄位,所以沒有引用ViewModel,反而是引用model,如原本PO的Model程式碼,不知道這樣的使用方式是否恰當或正確?
感謝指教~

舜~ iT邦高手 1 級 ‧ 2019-05-22 11:32:20 檢舉

ViewModel通常用在需要傳遞多個屬性/物件給view的情況下把這些東西打包起來傳遞用的,並不是必需的。

我要發表回答

立即登入回答