我使用以下js在表单中设置了一个日期选择器:
$("#Expiry").datepicker({
regional: 'en-GB',
dateFormat: 'dd/mm/yy',
firstDay: 1
});
并在我的视图中有以下内容(asp.net MVC)
<%: Html.TextBoxFor(m => m.Expiry) %>
在我的模型中,Expiry是可以为空的DateTime?
当我使用datepicker选择日期时,它使用正确的格式
当我从数据库加载数据时,它总是在时间部分结束时显示00:00:00
我怎么能不这样做呢?
如果我尝试在绑定中使用格式化表达式,那么它将无法编译。
当然jQuery应该尊重我为预先加载到表单字段中的值指定的格式?
它确实将日期选择器应用于该字段,因此我可以选择日历。它只是不将格式应用于加载的值
任何想法?
答案 0 :(得分:5)
我怎么能不这样做呢?
您可以使用[DisplayFormat]
属性修饰视图模型上的相应DateTime
属性,该属性允许您指定格式:
public class MyViewModel
{
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? Expiry { get; set; }
... other properties
}
并在视图中使用TextBoxFor
调用替换EditorFor
:
<%: Html.EditorFor(m => m.Expiry) %>
答案 1 :(得分:3)
使用以下内容创建编辑器模板~/Views/Shared/EditorTemplates/DateTime.cshtml
:
@model DateTime?
@{
string finalDate = string.Empty;
if (Model != null)
{
DateTime date = (DateTime)Model;
finalDate = String.Format("{0:d}", date.Date.ToShortDateString());
}
@Html.TextBox(string.Empty, finalDate, new { @class = "datepicker" })
在你的View中写道(抱歉是razor语法,我不知道aspx语法)
@Html.EditorFor(model => model.Expiry)
因此,将来您不必担心应用程序中的日期格式。
答案 2 :(得分:0)
如果您的应用程序只有一种文化,您可以在web.config文件中设置文化,如下所示:
<globalization culture="en-US" />
或西班牙:
<globalization culture="es-ES" />
这样,绑定将考虑指定的格式来转换表单输入值。