ZVe*_*nue 87 c# asp.net-mvc datetime asp.net-mvc-3
在MVC剃须刀中,我将当前日期放在数据库中,就像这样.
model.Returndate = DateTime.Now.Date.ToShortDateString();
Run Code Online (Sandbox Code Playgroud)
由于数据库字段是日期时间数据类型,并且我将当前日期转换为字符串格式,这不起作用..我该怎么做?我正在做字符串格式,因为我希望日期为mm/dd/yyyy格式而不是mm/dd/yyyy hh:mm:ss时间格式..
编辑:
在控制器中我有
var model = new ViewModel();
model.ReturnDate = DateTime.Now;
return PartialView("PartialView", model);
Run Code Online (Sandbox Code Playgroud)
在部分视图中,我有
@Html.EditorFor(model => model.Returndate)
Run Code Online (Sandbox Code Playgroud)
这是将日期显示为日期和时间的地方......我只想显示日期.不是时候.我希望这个编辑更好地解释.
小智 125
只需要自己处理这个场景 - 找到一个非常简单的方法来做到这一点,只需在模型中注释你的属性,如下所示:
[DataType(DataType.Date)]
public DateTime? SomeDateProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)
它也会隐藏日期选择器中的时间按钮.
对不起,如果这个答案有点晚了;)
Rus*_*rke 94
如果列类型是SQL中的DateTime,那么它将存储您传递或不传递的时间.
最好妥善保存日期:
model.ReturnDate = DateTime.Now;
Run Code Online (Sandbox Code Playgroud)
然后在需要显示时格式化它:
@Html.Label(Model.ReturnDate.ToShortDateString())
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是EditorFor:
@Html.EditorFor(model => model.ReturnDate.ToShortDateString())
Run Code Online (Sandbox Code Playgroud)
要么
@Html.EditorFor(model => model.ReturnDate.ToString("MM/dd/yyyy"))
Run Code Online (Sandbox Code Playgroud)
要向模型添加属性,请添加以下代码:
public string ReturnDateForDisplay
{
get
{
return this.ReturnDate.ToString("d");
}
}
Run Code Online (Sandbox Code Playgroud)
然后在PartialView中:
@Html.EditorFor(model => model.ReturnDateForDisplay)
Run Code Online (Sandbox Code Playgroud)
编辑:
嗨,大家好,只想澄清这个答案我的说法'如果你正在使用EditorFor',那就意味着你需要有一个EditorFor模板来表示你想要代表的值类型.
编辑器模板是管理MVC中重复控件的一种很酷的方法:
http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/
您可以将它们用于像String这样的天真类型,就像我上面所做的那样; 但它们特别适合让您为更复杂的数据类型模拟一组输入字段.
Bri*_*rij 39
如果要在TextBox中显示,则此方法有效:
@Html.TextBoxFor(m => m.Employee.DOB, "{0:dd-MM-yyyy}")
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 16
日期库中的日期/时间根本不是格式化版本.它只是日期/时间本身.从数据库中提取值时,如何显示该日期/时间是另一回事.我强烈怀疑你真的只是想要:
model.Returndate = DateTime.Now.Date;
Run Code Online (Sandbox Code Playgroud)
或者可能
model.Returndate = DateTime.UtcNow.Date;
Run Code Online (Sandbox Code Playgroud)
是的,如果你看一下使用SQL Server Studio或任何数据库,你现在看到的午夜-但是这无关紧要,当你取的日期从数据库中,并显示给用户,那么你可以申请相关的格式.
编辑:关于您编辑的问题,问题不在于模型 - 它是您指定视图的方式.你应该使用类似的东西:
@Html.EditorFor(model => model.Returndate.Date.ToString("d"))
Run Code Online (Sandbox Code Playgroud)
短日期模式d
的标准日期和时间格式说明符在哪里(这意味着它将考虑当前的文化设置).
这就是我反复说过的一点 - 当你向用户显示日期/时间时,就是把它格式化为没有时间的日期的时候.
编辑:如果这不起作用,应该有一种方式用格式字符串装饰模型或视图 - 或类似的东西.我不是一个真正的MVC人,但感觉应该有一个很好的方式来做这个声明性的...
小智 8
您可以修改ViewModel,如下所示:
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",ApplyFormatInEditMode = true)]
Run Code Online (Sandbox Code Playgroud)
您可以使用应用自定义日期时间格式 ToString
,如:
DateTime.Now.Date.ToString("MM/dd/yyyy");
Run Code Online (Sandbox Code Playgroud)
DateTime.ToString
可以在这里和这里找到关于格式模式的进一步阅读.
编辑:在您的问题编辑之后,就像其他建议您应该在您的视图中应用日期格式:
model.Returndate = DateTime.Now.Date;
@Html.EditorFor(model => model.Returndate.Date.ToString("MM/dd/yyyy"))
Run Code Online (Sandbox Code Playgroud)
如果你有一个如下所示的 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>
Run Code Online (Sandbox Code Playgroud)