2011-11-03 47 views
2

我想在沒有時間和格式的情況下格式化文本框中顯示的DateTime:2011年1月1日,而不是顯示和編輯方案的默認01/01/2011。使用編輯器模板進行日期時間格式化MVC

我已經使用DateTime的以下模板以便使用datepicker。我可以以某種方式在這裏包含格式?

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime?>" %> 
<%: Html.TextBox("",ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line" }) %> 

在此先感謝。

回答

3

ViewData.TemplateInfo.FormattedModelValue日期時間對象?

得到你想要的DateTime對象的使用格式如下:這應該工作

<%= 
var theDate = Model.HasValue ? Model.Value.ToString("dd MMM, yyyy") : DateTime.Now.ToString("dd MMM, yyyy"); 


Html.TextBox("", theDate, new { @class = "text-box single-line" }) %> 

的原因,當你調用Model.ToString("dd MMM, yyyy")是因爲它是你得到一個錯誤

var now = DateTime.Now; 
var formattedDate = now.ToString("dd MMM, yyyy"); 

一個可爲空的對象,它的ToString()方法不接受任何參數。該模型的值是一個DateTime對象,它接受參數。

+0

,因爲模板的我用我不能做的格式在那樣的看法。 – Tsarl

+0

你能設置模板上的值,然後在視圖中輸出它嗎? – Jason

+0

試圖像Darin建議的那樣,但我得到了我在他的解決方案的評論中提到的錯誤。 – Tsarl

5
<%= Html.TextBox("", Model.HasValue ? Model.Value.ToString("dd MMM, yyyy") : "", new { @class = "text-box single-line" }) %> 

或視圖模型更好的是:

[DisplayFormat(DataFormatString = "{0:dd MMM, yyyy}", ApplyFormatInEditMode = true)] 
public DateTime? Foo { get; set; } 
+0

第一個出現錯誤:方法.ToString沒有重載接受一個參數。我將不得不改變我的視圖模式,以使用第二個視圖模型,這樣我會回到一點。 – Tsarl

+0

@Tsarl,哦,我沒注意到你使用了一個可爲空的DateTime。在這種情況下,您需要測試模型是否有價值,但我個人建議採用第二種方法。 –

+0

再次感謝達林。你和傑森都非常有幫助,幾乎在同一時間給了我正確的答案。我將他的答案標記爲已接受的答案,只是因爲他的聲譽比你低。) – Tsarl