2012-06-23 61 views
3

我是asp.net mvc3的新手。由於在asp.net mvc3中使用了慣例,修改單個代碼真的讓人感到困惑和困難。我試圖僅以1999年9月5日的格式顯示出生日期日期,而不是顯示日期和時間。在Edit.cshtml中很好,日期選擇器用於選擇日期和值保存在僅日期的數據庫中。但是,我有BirthDate列的數據類型爲日期不是日期時間和使用@Html.DisplayFor(model => model.BirthDate);Details.cshtml顯示日期和時間。而在谷歌搜索我發現並實現下面的代碼在慾望格式顯示日期:使用其他而不是@ Html.DisplayFor在asp.net mvc 3剃鬚刀視圖

@Model.BirthDate.ToString("dd MMM YYYY"); 

@Html.DisplayFor(model => model.BirthDate.ToString("dd MMM YYYY")); 

它給出錯誤沒有重載方法需要1個參數。此外,我可以使用像:

[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")] 
pubilc DateTime BirthDate { get; set } 

因爲,我已經使用模型第一種方法爲實體框架。我應該在哪裏實現上述DisplayFormat財產或者什麼可能是剃刀語法我的情況

回答

0

第三種方法是根據我的最好的方式來顯示在Details.csthml正道日期COS

  1. 演示模型正在處理UI的所有方面,並且您的視圖沒有不必要和冗餘的格式代碼,特別是如果您重新使用該屬性。
  2. 啓用單元測試
  3. 如果您重複使用模型,則在不同的頁面上保持一致。

您也可以編寫一個幫助器方法來格式化日期並在所有演示文稿/視圖模型中一致地使用它。

public string FormattedDate(this DateTime dateTime) 
{ 
    return dateTime.ToString("dd MMM YYYY"); 
} 
+0

感謝您的回覆。我是完全陌生的mvc3你會plz給我的步驟如何在我的場景中實現助手 – CodeManiac

+0

只需創建一個叫做ViewFormatter/FormatHelper的類放入你需要的方法,然後在你的視圖或模型中引用這個命名空間 – Baz1nga

0

我喜歡用一種裝飾模式來處理這種事情。假設你的模型類叫做MyModel。然後定義如下的包裝類:

public class MyModelDecorator 
{ 
    public MyModel BaseItem { get; set; } 

    [DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")] 
    public DateTime BirthDate { get; set; } 

    public MyModelDecorator(MyModel baseItem) 
    { 
     BaseItem = baseItem; 
    } 
} 

然後在您的視圖中,您可以引用基本模型屬性或裝飾屬性。

@Html.DisplayFor(m => m.BirthDate) 
@Html.DisplayFor(m => m.BaseItem.SomeOtherProperty) 

如果有比這更好的解決辦法,那麼我真的很想聽聽....

+0

好的,無法得到如何使用。我在裏面創建了文件夾Decorator和MyModelDecorator.cs。現在,我認爲我引用了'@model IVRControlPanel.Decorator.MyModelDecorator'。 ** MyModel **的屬性未綁定,但檢測到了BirthDate屬性。或者,我做錯了 – CodeManiac

+0

@CodeManiac * MyModel *不是此示例中的屬性名稱,它是* BaseItem *。可以將它命名爲任何你喜歡的東西。 – McGarnagle

+0

我不是說它的屬性名稱。在這裏在我的情況下,我有用戶類(作爲MyModel),並具有像用戶名,電子郵件,密碼等屬性不綁定到我的看法 – CodeManiac

1

好吧,我知道我回答張貼問題8月份前,但我只有意圖是,這可能對未來引用這個問題的其他人有用。
我也沒有發言MVC和我也面臨類似的問題,我只需要顯示日期,而不是時間和以下爲我工作。代替@Html.DisplayFor()。使用<span>
所以,在問題中提到的情況下,它會是這樣:

<span>@String.Format("{0:D}", model.BirthDate)</span> 

Output: Sunday, September 05, 1999 

沒有,需要添加額外的類/文件格式化。

0

對於幫助任何ASPX用戶sumbad的答案,但你這是怎麼做到這一點:

<%=Html.Enconde(String.Format("{0:D}", item.yourDate))%> 

希望這可以幫助別人。