从任何地方发布有效的DateTimes

Cli*_* Ok 6 c# asp.net asp.net-mvc datetime datepicker

我想创建一个简单的ASP.Net表单,它将获得出生日期.我有一个具有此属性的模型:

[DataType(DataType.Date)]
public DateTime? BirthDate{ get; set; }
Run Code Online (Sandbox Code Playgroud)

在我看来(正在使用datepicker):

@Html.LabelFor(model => model.BirthDate)
@Html.TextBoxFor(model => model.BirthDate, new { @class = "form-control date-picker" })
@Html.ValidationMessageFor(model => model.BirthDate, "", new { @class = "text-danger" })
Run Code Online (Sandbox Code Playgroud)

我的javascript datepicker上唯一一个设置是:

format: 'L'
Run Code Online (Sandbox Code Playgroud)

因为我想要没有时间的展示日期.

现在,我无法保存,因为验证错误:

值'12/23/2000'对BirthDate无效.

现在,我知道,它是一个全球化错误......我需要<globalization>在web.config等元素中设置文化...但是,你注意到我没有设置格式(除了datepicker格式"L")?我希望这种形式能够从任何国家的人们那里获得生日,没有具体的文化/形式等.

这可能吗?我该怎么做?

编辑:

  • 你使用哪个日期选择器?
    JQuery一个,但这不是一个requeriment,我可以更改为任何可以轻松处理不同保存格式"yyyy-mm-dd"和显示格式的日期选择器.
  • 您的服务器所在的区域设置以及您希望在MVC代码中使用哪种格式并在数据库中保留?
    我不知道我的客户将在哪里托管该网站,其AWS ...我更喜欢与我们合作.

pgc*_*can 9

假设您的日期选择器可以在Date()js对象中返回所选日期.我建议将日期值转换为ISO8601等标准格式.因此,您需要做的是在日期选择器上附加onChange事件,并将选定的Date()值转换为ISO8601格式.您可以将此转换后的值分配给隐藏字段(只需date.toISOString()).

MVC .net解析器也理解ISO8601格式,因此当您的表单数据发布在服务器上时,它会被解析为正确的日期值.也看到这个问题.

我使用jquery UI datepicker创建了一个jsfiddle.它使用altFormat和altField,它可以用于内部日期格式,而不管在实际日期输入字段中向用户显示的日期格式如何.

在这里找到jsfiddle - https://jsfiddle.net/Prasoon1983/kyjvwkLd/2/

$("#dob").datepicker({
altFormat: "yy-mm-dd",
altfield:"#dobInternal"
});
$( "#dob" ).datepicker( "option", "altField", "#dobInternal" );
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<input type="text" id="dob" />
<input type="text" id="dobInternal" />
Run Code Online (Sandbox Code Playgroud)

我使用输入控件进行显示,但您可以使用隐藏输入.

希望能帮助到你.