我有以下剃刀代码,我想要mm/dd/yyyy
日期格式:
Audit Date: @Html.DisplayFor(Model => Model.AuditDate)
我尝试过多种不同的方法,但这些方法都不适用于我的情况
我的AuditDate是DateTime?
类型
我尝试过这样的错误并得到了这个错误:
@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())
其他信息:模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。
试过这个:
@Html.DisplayFor(Model => Model.AuditDate.ToString("mm/dd/yyyy"))
方法'ToString'没有重载需要1个参数
答案 0 :(得分:127)
如果您使用DisplayFor
,则必须通过DisplayFormat
属性定义格式或使用自定义显示模板。 (可以找到预设DisplayFormatString
的完整列表here。)
[DisplayFormat(DataFormatString = "{0:d}")]
public DateTime? AuditDate { get; set; }
或创建视图Views\Shared\DisplayTemplates\DateTime.cshtml
:
@model DateTime?
@if (Model.HasValue)
{
@Model.Value.ToString("MM/dd/yyyy")
}
这将适用于所有DateTime
,甚至是你编码时间的那些。如果您希望它仅适用于仅限日期的属性,请在您的媒体资源上使用Views\Shared\DisplayTemplates\Date.cshtml
和DataType
属性:
[DataType(DataType.Date)]
public DateTime? AuditDate { get; set; }
最后一个选项是不使用DisplayFor
而是直接渲染属性:
@if (Model.AuditDate.HasValue)
{
@Model.AuditDate.Value.ToString("MM/dd/yyyy")
}
答案 1 :(得分:18)
如果您只是输出该模型属性的值,则不需要DisplayFor
html助手,只需使用proper string formatting直接调用它。
Audit Date: @Model.AuditDate.Value.ToString("d")
应输出
Audit Date: 1/21/2015
最后,您的审核日期可能为null,因此您应该在尝试格式化可空值之前进行条件检查。
@if (item.AuditDate!= null) { @Model.AuditDate.Value.ToString("d")}
搜索您收到的错误provides this answer,这表明错误来自您在Html帮助程序中使用单词Model。例如,使用@Html.DisplayFor(Model=>Model.someProperty)
。更改这些内容以使用Model
以外的其他内容,例如:@Html.DisplayFor(x=>x.someProperty)
或将这些帮助中的大写M
更改为小写m
。
答案 2 :(得分:5)
@ ChrisPratt关于使用显示模板的答案是错误的。使它工作的正确代码是:
@model DateTime?
@if (Model.HasValue)
{
@Convert.ToDateTime(Model).ToString("MM/dd/yyyy")
}
那是因为.ToString()
for Nullable<DateTime>
doesn't accept Format
parameter。
答案 3 :(得分:3)
我用这种方式实现了类似的东西:
@Html.TextBoxFor(Model => Model.AuditDate, "{0:dd-MMM-yyyy}", new{@class="my-style", @readonly=true})
2.在CSS中将零轮廓和零边框提供给TextBox。
.my-style {
outline: none;
border: none;
}
并...... ......完成了:)
答案 4 :(得分:2)
对我而言,使用
就足够了[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime StartDate { set; get; }
答案 5 :(得分:2)
经过一番挖掘后,我最终设置了Thread
的{{3}}值,以便在控制器的操作方法中设置CurrentCulture:
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
如果您希望在每个视图上都设置此设置,则可以使用以下CultureInfo("en-US")。
关于CurrentCulture
属性值:
此属性一起返回的other options对象 及其关联对象,确定日期的默认格式, 时间,数字,货币值,文本的排序顺序,套管 约定和字符串比较。
来源:CultureInfo
注意:如果控制器已在CurrentCulture
或类似日期格式为CultureInfo("en-US")
的情况下运行,则上一个"MM/dd/yyyy"
属性设置可能是可选的。< / p>
设置CurrentCulture
属性后,添加代码块以在视图中将日期转换为"M/d/yyyy"
格式:
@{ //code block
var shortDateLocalFormat = "";
if (Model.AuditDate.HasValue) {
shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("M/d/yyyy");
//alternative way below
//shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("d");
}
}
@shortDateLocalFormat
@shortDateLocalFormat
变量上方的格式为ToString("M/d/yyyy")
。如果使用ToString("MM/dd/yyyy")
,就像我先做的那样,那么你最终会得到MSDN CurrentCulture。也像leading zero issue ToString("d")
推荐的那样。实际上"d"
代表 Tommy ,也可以用于不同的文化/语言格式。
我猜上面的代码块也可以替换为某些“Short date pattern”或类似代码。
例如
@helper DateFormatter(object date)
{
var shortDateLocalFormat = "";
if (date != null) {
shortDateLocalFormat = ((DateTime)date).ToString("M/d/yyyy");
}
@shortDateLocalFormat
}
可以与此助手调用一起使用
@DateFormatter(Model.AuditDate)
更新,我发现在使用cool helper method方法时,还有其他方法可以做同样的事情。使用此方法时,无需使用Thread
的{{1}}属性。 CurrentCulture
作为第二个参数传递 - &gt; DateTime.ToString(String, IFormatProvider)到CultureInfo("en-US")
方法。
修改的辅助方法:
DateTime.ToString(String, IFormatProvider)
答案 6 :(得分:2)
我一直在我的代码中使用此更改:
旧代码:
<td>
@Html.DisplayFor(modelItem => item.dataakt)
</td>
新:
<td>
@Convert.ToDateTime(item.dataakt).ToString("dd/MM/yyyy")
</td>
答案 7 :(得分:2)
要在整个项目中应用此格式,可以在视图模型上使用[ DisplayFormat ]属性。
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public Nullable<System.DateTime> Date { get; set; }
答案 8 :(得分:0)
也许只是尝试
@(Model.AuditDate.HasValue ? Model.AuditDate.ToString("mm/dd/yyyy") : String.Empty)
你也可以使用很多类型的字符串格式 .ToString(“dd MMM,yyyy”) .ToString(“d”)等
答案 9 :(得分:0)
我的控制器上有类似的问题,这对我有用:
model.DateSigned.HasValue ? model.DateSigned.Value.ToString("MM/dd/yyyy") : ""
“DateSigned”是我模型中的值 该行读取,如果模型值具有值,则格式化该值,否则不显示任何内容。
希望有所帮助
答案 10 :(得分:0)
这是获取简单日期字符串的最佳方式:
@DateTime.Parse(Html.DisplayFor(Model => Model.AuditDate).ToString()).ToShortDateString()
答案 11 :(得分:0)
在视图中替换为:
def rabbit(rocks, jumps=0):
max_jump = max(element for element in rocks if element <= 50)
last = rocks[-1]
if max_jump >= last:
return jumps + 1
else:
return rabbit([rock - max_jump for rock in rocks if rock > 50], jumps + 1)
print(rabbit([32, 46, 70, 85, 96, 123, 145]))
print(rabbit([30, 70, 75, 120, 160, 170, 180, 190, 200, 246, 258]))
使用:
3
7
说明:如果AuditDate值不为null,则它将日期格式设置为dd / MM / yyyy,否则将其保持不变,因为它没有值。
答案 12 :(得分:0)
您可以使用Convert
<td>@Convert.ToString(string.Format("{0:dd/MM/yyyy}", o.frm_dt))</td>
答案 13 :(得分:-1)
请参阅this answer了解No overload for method 'ToString' takes 1 arguments
错误。
您无法格式化可为空的DateTime - 您必须使用DateTime.Value属性。
@Model.AuditDate.HasValue ? Model.AuditDate.Value.ToString("mm/dd/yyyy") : string.Empty
提示:在将这些东西放入视图之前,使用intellisense在标准类中处理这些东西总是有帮助的。在这种情况下,您将收到一个很容易在类中发现的编译错误。