MVC3&剃刀 - 在文本框中将日期时间字符串从“mm / dd / yyyy 12:00:00 AM”更改为“mm / dd / yyy”

时间:2011-02-12 10:26:27

标签: datetime asp.net-mvc-3 razor html.textbox

我试图阻止时间显示在使用DateTime

的生日文本字段中

我的代码:(我正在使用Jquery DatePicker)

<label for="birthday">Birthday:</label>
            @Html.TextBox("birthday", (Model.Birthday.ToString()), new { @class = "datePicker" })

Javascript:

$(document).ready(function () {
    $('.datePicker').datepicker({ showOn: 'both', buttonImage: "/content/images/calendar-red.gif" });
});

我有日期的模型设置:

[DataType(DataType.Date)]
public DateTime? Birthday { get; set; }

文本框中的文字仍显示:

“8/21/2010 12:00:00 AM”

我希望文本框中的文字显示为:

“2010年8月21日”

我尝试了以下所有内容:

@inherits System.Web.Mvc.WebViewPage<System.DateTime>

但不要让我这样做,因为我是@using a model

4 个答案:

答案 0 :(得分:16)

我会在视图模型上使用编辑器模板和数据注释来指定格式,使视图更清晰:

[DataType(DataType.Date)]
[DisplayName("Birthday:")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? Birthday { get; set; }

然后在你的视图中:

<span class="datePicker">
    @Html.LabelFor(x => x.Birthday)
    @Html.EditorFor(x => x.Birthday)
</span>

然后调整选择器,因为文本框将不再具有datePicker类:

$('.datePicker :text').datepicker({ 
    showOn: 'both', 
    buttonImage: "/content/images/calendar-red.gif" 
});

答案 1 :(得分:2)

尝试更改为:

@Html.TextBox("birthday", (Model.Birthday.Value.ToShortDateString()), new { @class = "datePicker" })

由于您的日期时间为Nullable,因此您需要先.Value才能访问DateTime方法。

ToString上致电DateTime时,它会为您提供日期+时间。因此,您无需使用ToString with formattingToString来调用ToShortDateString

MSDN对ToShortDateString

有以下说法
  

由...返回的字符串   ToShortDateString方法是   文化敏感。它反映了   由当前定义的模式   culture的DateTimeFormatInfo对象。   例如,对于en-US文化,   标准的短日期模式是   “M / d / yyyy的”;对于de-DE文化,它   是“dd.MM.yyyy”;对于ja-JP   文化,它是“yyyy / M / d”。该   特定的特定格式字符串   电脑也可以这样定制   它与标准不同   短日期格式字符串。

答案 2 :(得分:1)

我实际上是在使用MVC 3时使用Razor遇到了这个问题。我最终必须在Shared / EditorTemplates中创建一个DateTime Partial Class来获取我需要的属性。
以前我的观点是:@Html.TextBoxWithAttributesFor(m => m.To, new { @class = "text-box", @readonly = "readonly" })但是这给了我TimeStamp。即使我尝试过.Value.DateTime或任何其他工作。但我目前的工作解决方案是:

视图:

@Html.EditorFor(m => m.To)

部分课程:

@model System.DateTime
@Html.TextBox("", (Model.ToShortDateString()), new { @class = "text-box", @readonly = "readonly" })

我使用此页面作为第二个来源: http://buildstarted.com/2010/09/10/overriding-displayfor-and-editorfor-to-create-custom-outputs-for-mvc/

答案 3 :(得分:0)

如果您有“Model.Birthday.ToString()”,则需要将其替换为“Model.Birthday.ToShortDateString()”