Asp.net mvc asp.net mvc视图的区域性特定日期/货币格式设置的正确位置在哪里?

Asp.net mvc asp.net mvc视图的区域性特定日期/货币格式设置的正确位置在哪里?,asp.net-mvc,internationalization,globalization,culture,Asp.net Mvc,Internationalization,Globalization,Culture,给定域对象: class BirthdayDomain { public DateTime Birthday { get; set; } public decimal BirthdayPresent { get; set; } } 我有两个选项可以将其传递给强类型视图: 一, 在我看来 <%: Model.Birthday.ToString("d"); %> <%: Model.BirthdayPresent.ToString("C2"); %> 和

给定域对象:

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

    public decimal BirthdayPresent { get; set; }
}
我有两个选项可以将其传递给强类型视图:

一,

在我看来

<%: Model.Birthday.ToString("d"); %>
<%: Model.BirthdayPresent.ToString("C2"); %>
和控制器中(例如)

在视图中,只输出字符串


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

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

我将区域性格式设置在视图中,因为我认为这是它的角色,控制器发送的数据保持强类型,而不是基本字符串。至少对于开发环境中的自动完成来说,这是一个额外的好处

编辑


如果您不想指定每次视图中有ToString时要使用的线程区域性,您还可以更改控制器中的当前线程UI区域性。

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

<globalization culture="auto" />

在你看来:

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


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

So以及生日。ToString(“d”);%%>你会传递一些文化信息吗?我想知道如何获得当前用户的区域设置。@Jedidja:通常区域性信息是我路线数据的一部分:例如:server/myapp/fr/mycontroller/myaction/id,控制器将其添加到我的一个名为“culture”的基本自定义视图模型porperty中,因此在我的视图中应该是birth.ToString(model.culture)哦..我们绝对不会那样。我猜一定有什么方法可以从请求中得到它。啊哈!谢谢,我会试一试的。将其标记为已回答(除非它不起作用:),这意味着我们肯定希望在视图模型中保留原始数据类型(这正是我所倾向的)。真棒:)
BirthdayDomain bd = Repository.GetBirthday(.....)
BirthdayView bv = new BirthdayView()
                  {
                       Birthday = bd.Birthday.ToString("d");
                       BirthdayPresent = bd.BirthdayPresent.ToString("C2");
                  }
<globalization culture="auto" />
<%= Html.Encode(DateTime.Now.ToString()) %>