我想创建一个简单的 ASP.Net 表单,它将获取出生日期。 我有一个具有此属性的模型:
[DataType(DataType.Date)]
public DateTime? BirthDate{ get; set; }
在我看来(正在使用日期选择器):
@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" })
我的 javascript datepicker 上唯一的一个设置是:
format: 'L'
因为我想要没有时间的显示日期。
现在,由于验证错误,我无法保存:
The value '12/23/2000' is not valid for BirthDate.
现在,我知道,这是一个全局化错误...我需要在 <globalization>
中设置文化web.config 中的元素等...
但是,您是否注意到我没有设置任何格式(日期选择器格式“L”除外)? 我希望该表格从任何国家/地区的人那里获取生日,而不是特定的文化/格式等。
这可能吗?我该怎么做?
编辑:
- 您使用的是哪个日期选择器?
JQuery 一个,但这不是要求,我可以更改为任何可以轻松处理不同保存格式“yyyy-mm-dd”和显示格式的日期选择器。 - 您的服务器位于哪个区域设置,您更喜欢哪种格式在 MVC 代码中工作并保存在数据库中?
我不知道我的客户将在哪里托管该网站及其 AWS...我更喜欢与 en-us 合作。
最佳答案
假设您的日期选择器可以在 Date() js 对象中返回选定的日期。我建议将日期值转换为标准格式,如 ISO8601。因此,您要做的是在日期选择器上附加一个 onChange 事件,并将选定的 Date() 值转换为 ISO8601 格式。您可以将此转换后的值分配给一个隐藏字段(简单的 date.toISOString())。
MVC .net 解析器也理解 ISO8601 格式,因此当您的表单数据发布到服务器上时,它会被解析为正确的日期值。参见 this question还有。
我已经使用 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" );
<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" />
我使用了一个用于显示目的的输入控件,但你可以使用一个隐藏的输入。
希望对您有所帮助。
关于c# - 从任何地方发布有效的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41309556/