如何只使月和年出现ASP.NET MVC

时间:2016-03-15 13:25:00

标签: c# asp.net asp.net-mvc date datepicker

我试图让月份和年份显示而不是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?

4 个答案:

答案 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(非常类似于小时,分,秒也是设置为不使用时的默认值。