我试图让月份和年份显示而不是dd / mm / yyyy。 我的代码如下:
继承模型代码
[Display (Name = "ValidFrom")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:MMM-yyyy}" , ApplyFormatInEditMode = true)]
public System.DateTime ValidFrom { get; set; }
这是视图文件
<div class="form-group">
@Html.LabelFor(model => model.ValidFrom, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.ValidFrom, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.ValidFrom, "", new { @class = "text-danger" })
</div>
</div>
有没有办法让我只能出现mm / yyyy?
答案 0 :(得分:1)
应用此属性。我测试了这个并且工作正常。
[DisplayFormat(DataFormatString ="{0:MM/yyyy}",ApplyFormatInEditMode =true)]
答案 1 :(得分:0)
您可以使用Moment.js library之类的:
moment().format("MMM YY")
答案 2 :(得分:0)
从UI的角度来看,你所拥有的应该可以正常工作。但是,如果输入由支持type="date"
HTML5输入类型的浏览器呈现为date
,则浏览器控件将覆盖显示。只有月份和年份没有HTML5控件,所以如果您需要以这种方式格式化,您需要确保使用标准type="text"
输入。
那就是说,我真的不确定发布的值是否会绑定回MVC。它可能,但它也可能没有。如果它没有正确绑定,您可能需要发布到字符串属性,然后将其强制转换为DateTime
。你可以这样做:
public string ValidFromString { get; set; }
public DateTime ValidFrom
{
get
{
DateTime validFrom;
return DateTime.TryParse(ValidFromString, out validFrom)
? validFrom
: default(DateTime);
}
set { ValidFromString = value.ToString("MMM-yyyy"); }
}
然后,您会发布到ValidFromString
并坚持ValidFrom
。
答案 3 :(得分:0)
HTML5支持月份类型。因此,以文本框为例,您可以执行以下操作:
@Html.TextBoxFor(m => m.MonthYear, new { type = "month"})
这将使用浏览器自己的月份选择器(在Chrome,Firefox和Edge上)。
实际上,这将创建以下HTML:
<input id="MonthYear" name="MonthYear" type="month">
默认情况下,HTML5的月份类型显示MMMM yyyy(这样表示完整的月份名称和4个字符的年份),或任何本地默认值(例如,葡萄牙语将显示“ agosto de 2019”。
尽管默认值或模型值始终以“ yyyy-MM”读取,所以不必担心使用其他语言的浏览器。
最后,数据在MVC方面位于DateTime中(因此,它将以1 / month / year 12:00:00 AM出现),并且日期默认为1(非常类似于小时,分,秒也是设置为不使用时的默认值。