【问题标题】:ASP.NET MVC Date input formatASP.NET MVC 日期输入格式
【发布时间】:2018-01-01 10:01:56
【问题描述】:

我有一个日期类型的文本框:

 @Html.TextBoxFor(m => m.DateOfBirth, new { @class = "form-control", type = "date" })

模型的字段 DateOfBirth

   [Required]
    [DataType(DataType.Date)]
    public DateTime DateOfBirth { get; set; } // Дата рождения

但日期格式是静态的 mm/dd/yy,这对于俄语 (dd/mm/yy) 是错误的。当然我可以手动设置日期格式,但是系统是多语言的,有英语以及俄语、吉尔吉斯语、乌兹别克语(它们都使用欧洲格式)。当用户更改语言时

 Thread.CurrentThread.CurrentCulture =CultureInfo.CreateSpecificCulture(lang);
 Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);

他应该看到适当的日期格式。但不知何故它没有发生:(

我已经探索过格式取决于浏览器使用的语言。但是chrome无法以吉尔吉斯语显示...

【问题讨论】:

  • HTML5“日期”输入的自定义格式似乎是不可能的(检查stackoverflow.com/a/9519493/967736)。您可以创建自己的自定义 Web 组件(如 stackoverflow.com/a/32149869/967736 中建议的那样),或者您可以使用一个好的和旧的 jQuery 日期选择器插件(或 Angular、React、Vue 等)来完成这项工作。如果您的目标是浏览器兼容性和跨不同浏览器的一致用户体验,我建议不要使用输入类型日期,因为此类输入的呈现将是 Web 浏览器的责任。
  • @IPValverde 感谢您的回答!我实际上使用了 jQuery 的日期选择器,但无法使其成为多语言。 <script> $(function () { $("#datepicker").datepicker({ changeMonth: true, changeYear: true }); }); $.datepicker.setDefaults( $.extend( { 'dateFormat': 'dd-mm-yy' }, $.datepicker.regional["fr"] ) ); </script>还是英文的

标签: asp.net-mvc date format culture


【解决方案1】:

您可以使用 jquery.ui 日期选择器完成您想要的操作。通过使用它(或任何其他提供类似功能的库),您可以轻松地在多个浏览器中保持一致的用户体验,同时使用标准的 HTML5 日期输入 (<input type="date" />),您将拥有特定于浏览器的行为。

您可以在加载页面时简单地将日期选择器设置为“区域”。您的目标之一似乎是能够处理多种语言,我建议坚持“本地化”的想法,而不仅仅是设置dateFormat 属性。如果 jquery ui 没有为您正在寻找的文化提供本地化,请创建一个。

我创建了一个简单的示例,您可以在其中看到本地化在客户端工作。这个想法将非常相似,但在您的情况下,它将在服务器端:https://jsfiddle.net/ipvalverde/wxLxLe7p/9/

关于 ASP.net MVC,我建议您创建一个 Razor 视图,以使用您的文化信息在屏幕上设置所有日期选择器元素。像这样的:

@{
    _Layout = null;
}

var currentCulture = System.Threading.Thread.CurrentThread.CurrentUICulture;
string cultureCode = currentCulture.Name;

string datepickerLocalization = // Convert the thread culture name to datepicker culture name...

<script>
    $(function () {
      $.datepicker.setDefaults($.datepicker.regional["@datepickerLocalization"]);
    })
</script>

确保您已加载支持语言的本地化 javascript。

如果这有帮助,请告诉我。

【讨论】:

  • 这应该有帮助,但没有。我已经添加了 datepicker-fr.js 文件,但什么也没发生
  • 你不会相信,我也是这么做的
  • @AzizjanHamidovichAyupov 你能保证$.datepicker.regional["fr"] 已定义吗?而且,你确定你正在执行$.datepicker.setDefaults before 使用$("my-selector").datepicker() 设置每个输入吗?
猜你喜欢
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多