1

给定一个域对象:

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");
                  }

并在视图中只输出字符串。

我的问题是:如果我想支持用户(浏览器?)当前的语言环境设置,以便日期和货币以您期望的方式显示,那么最好的地方是哪里?可以在视图或控制器中完成吗?处理此问题的普遍接受的技术是什么?

4

3 回答 3

2

如果您想支持浏览器语言,请将其放在您的 web.config 中:

<globalization culture="auto" />

在您看来:

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

ACCEPT-LANGUAGE 请求标头将用于设置文化并相应地格式化日期。

于 2010-03-04T06:54:00.633 回答
0

通常,您希望在模型中进行所有字符串操作。当您的控制器实例化一个新模型时,将本地信息传递给它,以便模型可以为您正确格式化日期。另一种选择是让模型将本地信息从请求的上下文中提取出来。只要确保将您的逻辑纳入模型即可。

于 2010-03-03T19:41:27.973 回答
0

我将文化格式放在视图中,因为在我看来这是它的作用,控制器发送的数据保持强类型,而不是基本字符串。至少对于您的开发环境中的自动完成,这是一个奖励......

编辑

如果您不想在每次视图中有 ToString 时指定使用哪种文化,您也可以在控制器中更改当前的 Thread UI 文化。

于 2010-03-03T20:00:51.353 回答