首页 > 解决方案 > MVC:ViewModel 值不会使用 type="month" 在 datepicker 中显示

问题描述

抱歉,如果这已经被问到了 - 我已经在谷歌上搜索了一个小时没有运气,所以我想我会在这里发帖,看看我是否能得到答案。

我正在使用 MVC 5 + Entity Framework 构建一个 Web 应用程序。我正在开发的模块之一是燃料卡跟踪器,其中包含有关连接到车辆的燃料卡的详细信息。

我有一个名为的基本视图模型FuelCardViewModel,它是FuelCard带有几个SelectList对象的模型(来自 EF)。我拥有的一个DateTime财产是一个名为的财产ExpiryDate,它将持有卡的到期日期。

当我填充视图模型并将其发送到Edit视图时,所有字段都使用 ViewModel 中的值自动填充,但字段除外ExpiryDate。当该字段设置为 时type = "date",该值被拉出并正确显示,所以我知道这不是我的 ViewModel 绑定的问题。问题是,我只想要月/年,所以我必须使用type = "month". 当它设置为type = "month"(根据卡到期日期格式仅显示月/年选择器)时,不会显示该值(尽管当我查看源代码并查看value财产。这进一步支持了 ViewModel 绑定正常工作的事实,但是当使用月份选择器而不是普通日期选择器时,只是格式混乱)。非常感谢您对此的任何帮助;如果需要更多信息,请告诉我,我可以提供。

ExpiryDate财产FuelCardViewModel

[Required]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MMMM yyyy}")]
[DataType(DataType.Date)]
[DisplayName("Expiry Date")]
public DateTime ExpiryDate { get; set; }

如果我想使用type = "date",我必须根据此处的其他答案更改{0:MMMM yyyy}{0:yyyy-MM-dd},因此将其更改{0:MMMM yyyy}为只是尝试解决问题。

Edit认为的领域:

 <div class="form-group">
     @Html.LabelFor(model => model.ExpiryDate, htmlAttributes: new { @class = "control-label col-md-2" })
     <div class="col-md-10">
         @Html.EditorFor(model => model.ExpiryDate, new { htmlAttributes = new { @class = "form-control", type = "month"} })
         @Html.ValidationMessageFor(model => model.ExpiryDate, null, new { @class = "text-danger" })
     </div>
 </div>

视图如何Edit显示(带有type = "month"):

看图

Edit视图如何显示:

看图

标签: c#entity-frameworkrazorasp.net-mvc-5

解决方案


终于解决了这个问题!想我会在这里发布解决方案以帮助有需要的人。

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

应该是这样的:

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

这么简单的错误,但我的问题现在解决了!


推荐阅读