2011-10-09 58 views
2

我有一個顯示客戶詳細信息的視圖。ASP.Net MVC剃刀視圖 - 使用出生日期查找年齡

我想根據出生日期顯示年齡。

我嘗試了一些這樣的事情。

@Html.DisplayTextFor(model => DateTime.Now.Date.Subtract(model.DOB)) 

其中model.DOB有一個像1985年7月23日12:00:00 AM

一個值,給我一個錯誤

模板只能用於具有字段訪問權限,屬性訪問權限,單維數組索引或單參數自定義索引器表達式。

你能幫我一下,我可以如何顯示年齡與我的出生日期。

回答

1

喲ü可以這樣做

@{ 
var date=DateTime.Now.Date.Subtract(Model.DOB); 

@Html.DisplayTextFor(model =>date.Years); 
} 
+0

Jayanth,當我嘗試你的方式我得到這個值9574.00:00:00爲日期7/23/1985 12:00:00上午 – HaBo

+0

看到我編輯了代碼 –

+0

它給編譯錯誤,但下面的代碼爲我工作。謝謝您的意見。那幫助了我。 @ { var age = DateTime.UtcNow.Year - Model.DOB.Year; 年齡: @ Html.DisplayTextFor(model => age); } – HaBo

1

這裏有兩個問題:

  1. 這個邏輯應該你的觀點之前進行。您的視圖模型應該有一個Age屬性,因爲這就是您真正想要顯示的內容。該屬性應該由控制器填充。
  2. 計算某人的實際年齡可能會非常棘手,因爲您可能不想根據他們活着的365天的年數從字面上顯示該人的年齡。

    public class MyViewModel 
    { 
        ... 
        public TimeSpan Age {get;set;} 
    } 
    

    然後使用the correct method來計算,當你創建模型別人的年齡:

    var model = new MyViewModel 
          { 
           ... 
           Age = CalculateAge(person.DOB, DateTime.Now) 
          }; 
    

    然後修改您的視圖代碼

所以,你應該通過修改你的模型開始:

@Html.DisplayTextFor(model => model.Age) 
+0

請使用'DateTime.UtcNow'計算人的年齡。你不想依賴於當前的服務器時間,你會嗎?)? –

+0

@MariusSchulz:其實,理想情況下,我會使用依賴注入爲我提供一個'IUserDateTimeProvider'實現,它查看用戶的時區首選項。它比'DateTime。*'更容易測試,我不喜歡假裝世界仍圍繞着格林威治(對女王陛下的尊重)。;-) – StriplingWarrior

+0

這也非常好 - 但'DateTime.Now'不是(這是我試圖做的唯一的一點)。 –

2

首先,弄清楚如何計算年齡: Calculate age in C#

然後該代碼添加到您的視圖模型作爲新屬性(或填充它,當你設置你的視圖模型)。

public int Age { get{ 
    DateTime now = DateTime.Today; 
    int age = now.Year - DOB.Year; 
    if (DOB > now.AddYears(-age)) age--; 
    return age; 
}} 

然後使用該屬性,而不是:

@Html.DisplayTextFor(model => model.AGE)