C# 如何在ASP.NET MVC中只显示月份和年份

C# 如何在ASP.NET MVC中只显示月份和年份,c#,asp.net,asp.net-mvc,date,datepicker,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

我正在尝试使月份和年份显示,而不是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>
这是查看文件

[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>

@LabelFor(model=>model.ValidFrom,htmlAttributes:new{@class=“controllabel col-md-2”})
@EditorFor(model=>model.ValidFrom,new{htmlAttributes=new{@class=“form control”}})
@Html.ValidationMessageFor(model=>model.ValidFrom,“,new{@class=“text danger”})
是否有一种方法只能使mm/yyyy显示?

您可以使用类似的方法:

您可以使用类似的方法:


从UI的角度来看,您所拥有的应该可以很好地工作。但是,如果支持
date
HTML5输入类型的浏览器将输入呈现为
type=“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

从UI的角度来看,您所拥有的应该可以正常工作。但是,如果支持
date
HTML5输入类型的浏览器将输入呈现为
type=“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

应用此属性。我已经测试过了,效果很好

[DisplayFormat(DataFormatString ="{0:MM/yyyy}",ApplyFormatInEditMode =true)]

应用此属性。我已经测试过了,效果很好

[DisplayFormat(DataFormatString ="{0:MM/yyyy}",ApplyFormatInEditMode =true)]

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中显示),day默认为1(非常类似于不使用时,小时、分钟和秒也设置为默认值)。

HTML5支持键入month。因此,使用textboxfor作为示例,您可以执行以下操作:

@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中显示),day默认为1(非常类似于不使用时,小时、分钟和秒也设置为默认值).

你的约会挑选者在哪里?@Liam我想他指的不是约会挑选者,而是“`”,请看这篇文章@Liam只是把它放在抱歉的地方。三个M(MMM yyyy)是吗不知怎么搞砸了字符串格式?你能显示原始HTML吗?你的日期选择器在哪里?@Liam我想他指的不是日期选择器,而是“`”,请看这篇文章@Liam只是把它放在抱歉的地方。三个M(MMM yyyy)是吗不知怎么搞砸了字符串格式?你能显示原始HTML吗?HTML5中有一个名为type=“month”的月份控件。Chrome、Firefox和Edge支持它,并显示一个月份选择器。HTML5中有一个名为type=“month”的月份控件。Chrome、Firefox和Edge支持它,并显示一个月份选择器。