1

我已经使用以下 js 在表单中设置了一个日期选择器:

$("#Expiry").datepicker({
   regional: 'en-GB',
   dateFormat: 'dd/mm/yy',
   firstDay: 1
});

并在我看来有以下内容(asp.net MVC)

<%: Html.TextBoxFor(m => m.Expiry) %>

在我的模型中,Expiry 是可空的DateTime?

当我使用日期选择器选择日期时,它会以正确的格式进行选择

当我从数据库加载数据时,它总是在时间部分的末尾显示 00:00:00

我怎样才能让它不这样做?

如果我尝试在绑定中使用格式化表达式,那么它将无法编译。

当然,jQuery 应该尊重我为预加载到表单字段中的值指定的格式?

它确实将日期选择器应用于该字段,因此我可以使用日历进行选择。它只是不将格式应用于加载的值

有任何想法吗?

4

3 回答 3

6

我怎样才能让它不这样做?

您可以使用允许您指定格式的属性来装饰DateTime视图模型上的相应属性:[DisplayFormat]

public class MyViewModel
{
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime? Expiry { get; set; }

    ... other properties
}

并在视图内TextBoxForEditorFor调用替换:

<%: Html.EditorFor(m => m.Expiry) %>
于 2012-06-14T11:58:41.247 回答
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" })

在您的视图中写入(对不起,这是剃刀语法,我不知道 aspx 语法)

@Html.EditorFor(model => model.Expiry)

因此,将来您不必担心应用程序中的日期格式。

于 2012-06-14T12:02:01.057 回答
0

如果您的应用程序将只有一种文化,您可以在 web.config 文件中设置文化,如下所示:

<globalization culture="en-US" />

或西班牙:

<globalization culture="es-ES" />

这样,绑定将考虑指定格式来转换表单输入值。

于 2014-06-24T20:54:32.110 回答