2012-11-28 48 views
1

我有一個DateTime屬性在我的編輯聲明,如創建視圖模型:爲什麼DateTime編輯器不顯示視圖模型值?

[DataType(DataType.Date)] 
[Display(Name = "Start")] 
public DateTime DateTimeStart { get; set; } 

我用EditorForModel渲染整個視圖模型編輯器,但是當我取的記錄編輯,視圖模型的屬性得到正確的值,正如我已經通過向他們展示DisplayTextFor所證明的那樣,但MVC呈現的DateTime選擇器是空的,並且在下拉時顯示今天的日期。爲什麼這些不顯示預期的日期值?

+0

當您使用[DataType(DataType.Date)] ASP.NET MVC生成一個輸入字段type =「date」。支持HTML5的瀏覽器(Chrome)在這些字段上使用日期選擇器。該字段的值必須格式化爲YYYY-MM-DD才能正確顯示。你在IE,Chrome,FF中獲得不同的結果嗎? – Erwin

+0

@Erwin,除Chrome之外,我沒有檢查瀏覽器,但我只試過yy/mm/dd和yy-mm-dd,而不是yyyy。自那時起我就解決了這個問題,但稍後會再看一次。 – ProfK

+0

我希望[這] [1]可以幫助你。 P.S.我有同樣的,並幫助我 [1]:http://stackoverflow.com/questions/12633471/mvc4-datatype-date-editorfor-wont-display-date-value-in-chrome-fine-in- interne – alikhil

回答

0

您可以使用DisplayTemplates和EditorTemplates來定義如何顯示特定類型的屬性。

在視圖>共享文件夾中創建名爲DisplayTemplates的文件夾,然後創建另一個名爲EditorTemplates的文件夾,然後可以爲要顯示的每種不同類型的屬性添加自定義模板。模板以類似於部分的方式工作。

我有一個DisplayTemplate的日期時間

@model DateTime 
@if (Model.Value.Year == 1) { 
    @Html.TextBox("", "") 
} else { 
@Html.TextBox("", (Model.Value.ToString("dd/MM/yyyy"))) 
} 
<span class="help-text">dd/mm/yyyy</span> 

這裏是一個時間跨度的EditorTemplate

@model TimeSpan 

@Html.DropDownList("", Enumerable.Range(0, 30) 
    .Select(i => new SelectListItem { Value = i.ToString(), 
    Text = i.ToString(), Selected = Model.Days == i })) days 

@Html.DropDownList("", Enumerable.Range(0, 24) 
    .Select(i => new SelectListItem { Value = i.ToString(), 
    Text = i.ToString(), Selected = Model.Hours == i })) hours : 

@Html.DropDownList("", Enumerable.Range(0, 60) 
    .Select(i => new SelectListItem { Value = i.ToString(), 
    Text = i.ToString(), Selected = Model.Minutes == i })) minutes : 

@Html.DropDownList("", Enumerable.Range(0, 60) 
    .Select(i => new SelectListItem { Value = i.ToString(), 
    Text = i.ToString(), Selected = Model.Seconds == i })) seconds 

我要提醒的是,你可以花很多時間試圖讓EditorForModel到究竟是如何工作的你想要它,但總是會遇到不正常工作的情況,你必須訴諸手工編碼。

我們現在使用HTML幫助器來包裝我們的每個屬性的自定義HTML,這可以很好地與所描述的自定義模板一起工作,但也允許更多的靈活性。我們使用這個頁面作爲我們定製的HTML包裝的靈感。 ASP.NET MVC 3 Custom HTML Helpers- Best Practices/Uses查看具有最高票數而非接受答案的答案。

+0

是的,謝謝,我使用了日期編輯器模板和jQuery UI DatePicker。 – ProfK

+0

如果您認爲合適,請隨時將其標記爲答案。 –

+1

對不起湯姆,但你的答案沒有解決爲什麼DataType.DateTime的內置日期編輯器不工作,這是我的問題。 – ProfK

0

這取決於瀏覽器。截至目前,只有Opera爲您提供了HTML5日期輸入類型的日期選擇器。

+0

我不會問爲什麼datepickers是錯的,如果他們不在那裏,所以至少Chrome也給你這種控制。 – ProfK

0

我不得不在我的模型屬性上設置一個額外的數據註解來解決這個問題。

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 

我遇到了同樣的問題,你是。用戶在輸入欄中仍然會看到mm/dd/yyyy格式。這只是爲了格式化數據,因爲它使用內置的HTML EditorFor輔助程序進行分配。

相關問題