各位先進好,小弟剛學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欄位是可以正常顯示的,不知道該從何處下手除錯,再麻煩前輩們指點一下~謝謝~
您可以選擇不使用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
謝謝,測試使用第一個建議是可以的,第二個建議也是我原本就使用的方式,使用@Html.DisplayFor(model => model.StartDate)(但無法正確顯示值)
所以請教一下,是DateTime無法使用DisplayFor方式程現所造成的問題嗎?
我有看您給的參考連結,但還是看不出真正的問題是什麼~
感謝了~
另外想要請教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程式碼,不知道這樣的使用方式是否恰當或正確?
感謝指教~
ViewModel通常用在需要傳遞多個屬性/物件給view的情況下把這些東西打包起來傳遞用的,並不是必需的。