2012-11-28 51 views
1

我有一个DateTime属性在我的编辑声明,如创建视图模型:为什么DateTime编辑器不显示视图模型值?

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

我用EditorForModel渲染整个视图模型编辑器,但是当我取的记录编辑,视图模型的属性得到正确的值,正如我已经通过向他们展示DisplayTextFor所证明的那样,但MVC呈现的DateTime选择器是空的,并且在下拉时显示今天的日期。为什么这些不显示预期的日期值?

+0

当您使用[DataType(DataType.Date)] ASP.NET MVC生成一个输入字段type =“date”。支持HTML5的浏览器(Chrome)在这些字段上使用日期选择器。该字段的值必须格式化为YYYY-MM-DD才能正确显示。你在IE,Chrome,FF中获得不同的结果吗? – Erwin

+0

@Erwin,除Chrome之外,我没有检查浏览器,但我只试过yy/mm/dd和yy-mm-dd,而不是yyyy。自那时起我就解决了这个问题,但稍后会再看一次。 – ProfK

+0

我希望[这] [1]可以帮助你。 P.S.我有同样的,并帮助我 [1]:http://stackoverflow.com/questions/12633471/mvc4-datatype-date-editorfor-wont-display-date-value-in-chrome-fine-in- interne – alikhil

回答

0

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

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

我有一个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> 

这里是一个时间跨度的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 Custom HTML Helpers- Best Practices/Uses查看具有最高票数而非接受答案的答案。

+0

是的,谢谢,我使用了日期编辑器模板和jQuery UI DatePicker。 – ProfK

+0

如果您认为合适,请随时将其标记为答案。 –

+1

对不起汤姆,但你的答案没有解决为什么DataType.DateTime的内置日期编辑器不工作,这是我的问题。 – ProfK

0

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

+0

我不会问为什么datepickers是错的,如果他们不在那里,所以至少Chrome也给你这种控制。 – ProfK

0

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

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

我遇到了同样的问题,你是。用户在输入栏中仍然会看到mm/dd/yyyy格式。这只是为了格式化数据,因为它使用内置的HTML EditorFor辅助程序进行分配。

相关问题