如何在 ASP.NETMVC3中以特定格式呈现日期时间?

如果我在我的模型类中有一个类型为 DateTime的属性,我怎样才能以一种特定的格式呈现它——例如以 ToLongDateString()返回的格式?

我试过了。

@Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString())

... 引发异常,因为表达式必须指向一个属性或字段。

@{var val = item.MyDateTime.ToLongDateString();
Html.DisplayFor(modelItem => val);
}

... 它不会抛出异常,但是呈现的输出为空(尽管 val包含预期值,正如我在调试器中看到的那样)。

提前谢谢你的建议!

Edit

ToLongDateString只是一个例子。我实际上想使用的是 DateTimeDateTime?的自定义扩展方法,而不是 ToLongDateString:

public static string FormatDateTimeHideMidNight(this DateTime dateTime)
{
if (dateTime.TimeOfDay == TimeSpan.Zero)
return dateTime.ToString("d");
else
return dateTime.ToString("g");
}


public static string FormatDateTimeHideMidNight(this DateTime? dateTime)
{
if (dateTime.HasValue)
return dateTime.Value.FormatDateTimeHideMidNight();
else
return "";
}

因此,我认为我不能在 ViewModel 属性上使用 DisplayFormat属性和 DataFormatString参数。

219113 次浏览

您可以使用 [DisplayFormat]属性来装饰视图模型属性:

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",
ApplyFormatInEditMode = true)]
public DateTime MyDateTime { get; set; }

and in your view:

@Html.EditorFor(x => x.MyDate)

或者,为了显示值,

@Html.DisplayFor(x => x.MyDate)

另一种可能性(我不推荐)是使用弱类型助手:

@Html.TextBox("MyDate", Model.MyDate.ToLongDateString())

如果所有 DateTime类型都以相同的方式呈现,则可以使用自定义 DateTime显示模板。

In your Views folder create a folder named "DisplayTemplates" either under your controller specific views folder, or under "Shared" folder (these work similar to partials).

在内部创建一个名为 DateTime.cshtml的文件,该文件以 DateTime@model,并编码如何呈现日期:

@model System.DateTime
@Model.ToLongDateString()

现在你可以在你的视图中使用它,它应该可以工作:

@Html.DisplayFor(mod => mod.MyDateTime)

As long as you follow the convention of adding it to the "DisplayTemplates" folder and naming the file to match the type your are displaying, MVC will automatically use that to display your values. This also works for editing scenarios using "EditorTemplates".

这里有一些关于模板的更多信息。

如果您只想用特定的格式显示日期,只需调用:

@String.Format(myFormat, Model.MyDateTime)

使用 @Html.DisplayFor(...)只是额外的工作,除非您指定模板,或者需要使用构建在模板上的内容,比如迭代 IEnumerable<T>。创建模板非常简单,而且还可以提供很大的灵活性。在视图文件夹中为当前控制器(或共享视图文件夹)创建一个名为 DisplayTemplates的文件夹。在该文件夹中,添加一个部分视图,其中包含要为其生成模板的模型类型。在本例中,我添加了 /Views/Shared/DisplayTemplates并添加了称为 ShortDateTime.cshtml的部分视图。

@model System.DateTime


@Model.ToShortDateString()

现在你可以用下面的代码调用这个模板:

@Html.DisplayFor(m => m.MyDateTime, "ShortDateTime")

模型内部的简单格式化输出

@String.Format("{0:d}", model.CreatedOn)

或者在 foreach 循环里

@String.Format("{0:d}", item.CreatedOn)

只能像这样调整查看文件。您可以尝试这样做。

@Html.FormatValue( (object)Convert.ChangeType(item.transdate, typeof(object)),
"{0: yyyy-MM-dd}")

它是你的 DateTime类型数据。

如果我只是想显示日期的短格式,我只是使用 @ Model. date.ToShortDateString ()中输出日期

如果您只想用特定的格式显示日期,只需调用:

@Model.LeadDate.ToString("dd-MMM-yyyy")


@Model.LeadDate.ToString("MM/dd/yy")

它将导致以下格式,

26-Apr-2013


04/26/13

My preference is to keep the formatting details with the view and not the viewmodel. So in MVC4/Razor:

@Html.TextBoxFor(model => model.DateTime, "{0:d}");

日期时间格式参考: Http://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.71).aspx

然后我有一个绑定到它的 JQuery 数据采集器,它把日期作为一种不同的格式... ... 噢!

看来我需要将数据采集器的格式设置为相同的格式。

因此,我将 System.Globalization格式存储在 data-* 属性中,并在设置

@Html.TextBoxFor(
model => model.DateTime.Date,
"{0:d}",
new
{
@class = "datePicker",
@data_date_format=System.Globalization.CultureInfo
.CurrentUICulture.DateTimeFormat.ShortDatePattern
}));

最糟糕的是.net 和 datepicker 的格式不匹配,因此需要黑客技术:

$('.datePicker').each(function(){
$(this).datepicker({
dateFormat:$(this).data("dateFormat").toLowerCase().replace("yyyy","yy")
});
});

that's kind of weak, but should cover a lot of cases.

我没问题

<%=Model.MyDateTime.ToString("dd-MMM-yyyy")%>

我使用以下方法来内联格式并显示来自模型的日期属性。

@Html.ValueFor(model => model.MyDateTime, "{0:dd/MM/yyyy}")

否则,在填充 TextBox 或 Editor 时,您可以像@Darin 建议的那样,使用 [DisplayFormat]属性修饰属性。

最近也有同样的问题。

我发现在模型中简单地将 数据类型定义为 日期也可以工作(使用代码优先的方法)

[DataType(DataType.Date)]
public DateTime Added { get; set; }

这将在您的视图中以 dd/MM/yyyy格式显示

视角:

代替 DisplayFor使用这个代码

<td>


@(item.Startdate.HasValue ? item.Startdate.Value.ToString("dd/MM/yyyy") : "Date is Empty")


</td

它还检查日期列中的值是否为 null,如果为 true,则显示 Date is Empty 或该列中的实际格式化日期。

希望能帮助别人。

@{
string datein = Convert.ToDateTime(item.InDate).ToString("dd/MM/yyyy");
@datein
}

In MVC5 I'd use, if your model is the datetime

string dt = Model.ToString("dd/MM/yyy");

或者您的模型是否包含 datetime 的属性

string dt = Model.dateinModel.ToString("dd/MM/yyy");

以下是格式的官方含义:

Https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

你可以这样做 @item.Date.Value.Tostring("dd-MMM-yy");