只显示date和时间
在MVC剃刀,我正在这样的数据库中的当前date..
model.Returndate = DateTime.Now.Date.ToShortDateString();
由于数据库字段是一个date时间数据types,我将当前date转换为string格式,这是行不通的..我怎么能这样做? 我正在做的string格式,因为我想要的date以mm / dd / yyyy格式,而不是在mm / dd / yyyy hh:mm:ss时间格式..
编辑:
在我有控制器
var model = new ViewModel(); model.ReturnDate = DateTime.Now; return PartialView("PartialView", model);
在部分观点,我有
@Html.EditorFor(model => model.Returndate)
这是它在date和时间一起显示的date…我只想显示date。 不是时候。 我希望这个编辑更好地解释。
如果列types是SQL中的date时间,那么它将存储您传递一个或不是一个时间。
最好妥善保存date:
model.ReturnDate = DateTime.Now;
然后在需要显示时进行格式化:
@Html.Label(Model.ReturnDate.ToShortDateString())
或者,如果您使用的是EditorFor:
@Html.EditorFor(model => model.ReturnDate.ToShortDateString())
要么
@Html.EditorFor(model => model.ReturnDate.ToString("MM/dd/yyyy"))
要将属性添加到模型中,请添加以下代码:
public string ReturnDateForDisplay { get { return this.ReturnDate.ToString("d"); } }
然后在你的PartialView中:
@Html.EditorFor(model => model.ReturnDateForDisplay)
编辑:
嗨,大家好,只是想澄清这个答案,我的话说'如果你使用EditorFor',这意味着你需要有一个EditorFor你想要代表的types的值的模板。
编辑器模板是pipe理MVC中重复控件的一种很酷的方式:
http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/
你可以像上面所做的那样,将它们用于像String这样天真的types; 但是对于让您为更复杂的数据types设置一组input字段,它们特别好。
只是不得不自己处理这个场景 – 发现了一个非常简单的方法来做到这一点,只需在模型中注释你的属性就可以了:
[DataType(DataType.Date)] public DateTime? SomeDateProperty { get; set; }
它也会隐藏dateselect器的时间button。
对不起,如果这个答案有点晚了;)
如果你想在文本框中显示这个工程:
@Html.TextBoxFor(m => m.Employee.DOB, "{0:dd-MM-yyyy}")
数据库中的date/时间根本不是格式化版本。 这只是date/时间本身。 从数据库中提取值时,如何显示该date/时间是另一回事。 我强烈怀疑你真的只想要:
model.Returndate = DateTime.Now.Date;
或者可能
model.Returndate = DateTime.UtcNow.Date;
是的,如果您使用SQL Server Studio或其他方法查看数据库,现在可以看到午夜了 – 但这是不相关的,当您从数据库中提取date并将其显示给用户时, 则可以应用相关的格式。
编辑:关于你编辑的问题,问题不在于模型 – 这是你如何指定视图。 你应该使用像这样的东西:
@Html.EditorFor(model => model.Returndate.Date.ToString("d"))
其中d
是短date模式的标准date和时间格式说明符 (这意味着它将考虑当前的文化设置)。
这就是我反复说过的一点 – 当你向用户显示date/时间时 ,就是把时间格式化为date的时间。
编辑:如果这不起作用,应该有一种装饰模型或视图与格式string的方式 – 或类似的东西。 我不是一个真正的MVC的人,但它感觉应该是一个很好的方式来做这个声明…
您可以使用ToString
来应用自定义date时间格式,如:
DateTime.Now.Date.ToString("MM/dd/yyyy");
进一步阅读DateTime.ToString
格式模式可以在这里和这里find。
编辑:在您的问题编辑之后,就像其他人build议您应该在您的视图中应用date格式:
model.Returndate = DateTime.Now.Date; @Html.EditorFor(model => model.Returndate.Date.ToString("MM/dd/yyyy"))
我不确定在剃刀,但在ASPX你做:
<%if (item.Modify_Date != null) {%> <%=Html.Encode(String.Format("{0:D}", item.Modify_Date))%> <%} %>
剃刀上一定有类似的东西。 希望这会帮助某人。
你可以修改你的ViewModel如下:
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",ApplyFormatInEditMode = true)]
如果你有一个for循环如下面的那个。
将@ item.StartDate更改为@ item.StartDate.Value.ToShortDateString()
这将消除时间,以防万一你不能像在我的情况下在模型中注释你的财产。
<table> <tr> <th>Type</th> <th>Start Date</th> </tr> @foreach (var item in Model.TestList) { <tr> <td>@item.TypeName</td> <td>@item.StartDate.Value.ToShortDateString()</td> </tr> } </table>
你可以简单地转换date时间。 就像是:
@Convert.ToString(string.Format("{0:dd/MM/yyyy}", Model.Returndate))