在MVC剃须刀中,我将这样的当前日期放在数据库中..
model.Returndate = DateTime.Now.Date.ToShortDateString();
由于数据库字段是datetime数据类型,并且我将当前日期转换为字符串格式,这不起作用..我该怎么做?我正在做字符串格式,因为我希望日期为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)
这是将日期显示为日期和时间的地方......我只想显示日期。不是时候。我希望这个编辑更好地解释。
答案 0 :(得分:120)
我必须自己处理这个场景 - 找到一个非常简单的方法来做到这一点,只需在模型中注释你的属性就像这样:
[DataType(DataType.Date)]
public DateTime? SomeDateProperty { get; set; }
它也会隐藏日期选择器中的时间按钮。
对不起,如果这个答案有点晚了;)
答案 1 :(得分:94)
如果列类型是SQL中的DateTime,那么它将存储您传递或不传递的时间。
最好妥善保存日期:
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模板。
编辑器模板是管理MVC中重复控件的一种很酷的方法:
http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/
你可以将它们用于像String这样的天真类型,就像我上面所做的那样;但是它们特别适合让你为更复杂的数据类型模拟一组输入字段。
答案 2 :(得分:38)
如果要在TextBox中显示,则此方法有效:
@Html.TextBoxFor(m => m.Employee.DOB, "{0:dd-MM-yyyy}")
答案 3 :(得分:15)
日期基准中的日期/时间根本不是格式化的版本。它只是日期/时间本身。从数据库中提取值时,显示的日期/时间是另一回事。我强烈怀疑你真的只是想要:
model.Returndate = DateTime.Now.Date;
或可能
model.Returndate = DateTime.UtcNow.Date;
是的,如果您使用SQL Server Studio或其他任何内容查看数据库,您现在将看到午夜 - 但这是无关紧要的,当您从数据库中取出日期并将其显示给用户时,然后您可以应用相关格式。
编辑:关于您编辑的问题,问题不在于模型 - 它是您指定视图的方式。你应该使用类似的东西:
@Html.EditorFor(model => model.Returndate.Date.ToString("d"))
其中d
是短日期模式的standard date and time format specifier(这意味着它会考虑当前的文化设置)。
这就是我一再说过的话 - 当你向用户显示日期/时间时,就是把它格式化为没有时间的日期的时候。
编辑:如果这不起作用,应该有一种方法用格式字符串来装饰模型或视图 - 或类似的东西。我不是一个真正的MVC人,但感觉就像应该是一个以声明方式做这个的好方法......
答案 4 :(得分:8)
您可以按如下方式修改ViewModel:
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",ApplyFormatInEditMode = true)]
答案 5 :(得分:7)
您可以使用ToString
来应用自定义日期时间格式,例如:
DateTime.Now.Date.ToString("MM/dd/yyyy");
可以找到DateTime.ToString
格式模式的进一步阅读here和here。
编辑:在您的问题编辑之后,就像其他建议您应该在您的视图中应用日期格式一样:
model.Returndate = DateTime.Now.Date;
@Html.EditorFor(model => model.Returndate.Date.ToString("MM/dd/yyyy"))
答案 6 :(得分:4)
我在Razor中不确定,但在ASPX中你确实如此:
<%if (item.Modify_Date != null)
{%>
<%=Html.Encode(String.Format("{0:D}", item.Modify_Date))%>
<%} %>
Razor必须有类似的东西。希望这会对某人有所帮助。
答案 7 :(得分:2)
如果你有一个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>
答案 8 :(得分:2)
[Display(Name = "Bill Date")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime BillDate { get; set; }
现在,您的帐单日期将显示为。
答案 9 :(得分:1)
您可以简单地转换日期时间。类似的东西:
@Convert.ToString(string.Format("{0:dd/MM/yyyy}", Model.Returndate))
答案 10 :(得分:1)
此页面上的其他解决方案存在一些问题,因此以为我可以解决这个问题。
@Html.TextBoxFor(m => m.EndDate, "{0:d}", new { @class = "form-control datepicker" })
因此,您只需在第二个参数中添加“ {0:d}”,就可以了。