2

我在编辑中声明了一个 DateTime 属性,并创建了如下视图模型:

[DataType(DataType.Date)]
[Display(Name = "Start")]
public DateTime DateTimeStart { get; set; }

我曾经EditorForModel为整个视图模型渲染编辑器,但是当我获取要编辑的记录时,视图模型属性会获得正确的值,正如我通过用 a 显示它们所证明的那样DisplayTextFor,但是 MVC 渲染的 DateTime 选择器是空的,并且下拉时,显示今天的日期。为什么这些没有显示预期的日期值?

4

3 回答 3

1

我必须在我的模型属性上设置一个额外的数据注释来解决这个问题。

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

我遇到了和你一样的问题。用户仍将在输入字段中看到 mm/dd/yyyy 格式。这只是为了格式化数据,因为它是使用内置的 HTML EditorFor 助手分配的。

于 2013-11-12T14:48:18.853 回答
0

您可以使用 DisplayTemplates 和 EditorTemplates 来定义如何显示特定类型的属性。

在 Views > Shared 文件夹中,创建一个名为 DisplayTemplates 的文件夹和另一个名为 EditorTemplates 的文件夹,然后您可以为要显示的每种不同类型的属性添加自定义模板。模板的工作方式与部分模板类似。

我有一个用于 DateTime 的 DisplayTemplate

@model DateTime
@if (Model.Value.Year == 1) {
    @Html.TextBox("", "") 
} else {
@Html.TextBox("", (Model.Value.ToString("dd/MM/yyyy"))) 
}
<span class="help-text">dd/mm/yyyy</span>   

这是 TimeSpan 的 EditorTemplate

@model TimeSpan

@Html.DropDownList("", Enumerable.Range(0, 30)
    .Select(i => new SelectListItem { Value = i.ToString(), 
    Text = i.ToString(), Selected = Model.Days == i })) days  

@Html.DropDownList("", Enumerable.Range(0, 24)
    .Select(i => new SelectListItem { Value = i.ToString(), 
    Text = i.ToString(), Selected = Model.Hours == i })) hours : 

@Html.DropDownList("", Enumerable.Range(0, 60)
    .Select(i => new SelectListItem { Value = i.ToString(), 
    Text = i.ToString(), Selected = Model.Minutes == i })) minutes : 

@Html.DropDownList("", Enumerable.Range(0, 60)
    .Select(i => new SelectListItem { Value = i.ToString(), 
    Text = i.ToString(), Selected = Model.Seconds == i })) seconds

我要提醒您,您可以花费大量时间尝试让 EditorForModel 完全按照您的要求工作,但总会有一些情况下它不能完全正确地工作,您必须求助于手动编码。

我们现在使用 HTML 帮助器将我们的自定义 HTML 包装在每个属性周围,这可以与所描述的自定义模板一起很好地工作,但也提供了更多的灵活性。我们将此页面用作自定义 HTML 包装器的灵感。ASP.NET MVC 3 自定义 HTML 帮助程序 - 最佳实践/使用查看投票数最高的答案,而不是接受的答案。

于 2012-11-28T12:34:57.073 回答
0

这取决于浏览器。到目前为止,只有 Opera 为您提供了 HTML5 日期输入类型的日期选择器。

于 2013-03-30T13:35:35.833 回答