2010-03-03 79 views
1

給定一個域對象:asp.net mvc視圖的文化特定日期/貨幣格式的正確位置在哪裏?

class BirthdayDomain 
{ 
    public DateTime Birthday { get; set; } 

    public decimal BirthdayPresent { get; set; } 
} 

我有傳送到一個強類型的視圖兩種選擇:

1.

class BirthdayView 
{ 
    public DateTime Birthday { get; set; } 

    public decimal BirthdayPresent { get; set; } 
} 

,並在視圖

<%: Model.Birthday.ToString("d"); %> 
<%: Model.BirthdayPresent.ToString("C2"); %> 

2.

class BirthdayView 
{ 
    public string Birthday { get; set; } 

    public string BirthdayPresent { get; set; } 
} 

,並在控制器(例如)

BirthdayDomain bd = Repository.GetBirthday(.....) 
BirthdayView bv = new BirthdayView() 
        { 
         Birthday = bd.Birthday.ToString("d"); 
         BirthdayPresent = bd.BirthdayPresent.ToString("C2"); 
        } 

並在視圖只輸出字符串。

我的問題是:如果我想支持用戶(瀏覽器?)當前的區域設置,以便日期和貨幣按照期望的方式顯示,那麼最好的地方在哪裏?它可以在視圖或控制器中完成嗎?處理這個問題的普遍接受的技術是什麼?

回答

2

如果你想支持瀏覽器的語言把這個在你的web.config:

<globalization culture="auto" /> 

而在你的看法:

<%= Html.Encode(DateTime.Now.ToString()) %> 

Accept-Language請求頭將被用於設置文化並相應地格式化日期。

+0

艾哈!謝謝你會給我一個機會。標記爲已回答(除非它不起作用:)) – Jedidja 2010-03-04 12:51:56

+0

這意味着我們肯定希望在View Model中保留原始數據類型(這正是我所傾向的)。 – Jedidja 2010-03-04 12:55:15

+0

按預期工作。真棒:) – Jedidja 2010-03-04 13:08:19

0

通常,您想要在模型中執行所有字符串操作。當你的控制器實例化一個新模型時,把它傳遞給本地信息,以便模型可以正確地爲你設置日期格式。另一種選擇是讓模型將本地信息從請求的上下文中提取出來。只要確保將你的邏輯加入模型。

0

我把文化格式化在視圖中,因爲在我看來它是它的角色,控制器發送的數據保持強類型,而不是基本字符串。至少在你的開發環境自動完成它是獎金......

編輯

你也可以改變當前線程的UI文化在你的控制器,如果你不想指定whuich文化每次在視圖中都有一個ToString時使用。

+0

所以與Birthday.ToString(「d」); %>你是否通過某種CultureInfo?我想知道如何獲取當前用戶的區域設置。 – Jedidja 2010-03-03 20:41:19

+0

@Jedidja:通常情況下,文化信息是我路由數據的一部分: ex:server/myapp/fr-FR/mycontroller/myaction/id控制器將其保存在我的一個名爲「Culture」的基本自定義視圖模型屬性中在我看來這將是Birthday.ToString(Model.Culture) – Gregoire 2010-03-03 21:23:38

+0

哦......我們絕對不會有這樣的。我猜想必須有某種方法可以從請求中獲取。 – Jedidja 2010-03-03 21:31:25