繁体   English   中英

在 ASP.NET Core MVC 中的视图中格式化日期

[英]Format date within View in ASP.NET Core MVC

我在使用模型将日期时间转换为日期时遇到问题。

类库中的模型

public partial class LoanContract
{
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
    public DateTime LoanDateStart { get; set; }
}

项目模型

public class ModelLoan
{
    public LoanContract loanContract { get; set; }
}

控制器中的代码

 myList.loanContract = new LoanContract { LoanDateStart = DateTime.Today };

看法:

<input disabled type="date" asp-for="loanContract.LoanDateStart" id="dpDateNow" class="form-control" />

它显示如下: yyyy-MM-dd我想要实现的是我想将其更改为MM/dd/yyyy 我尝试使用.ToString("MM/dd/yyyy")但它不起作用。

感谢@Enrico 的评论,我将其添加到答案中:

在你的模型中试试这个:

[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]

并在您的控制器中将 DateTime 更改为 Date :

myList.loanContract = new LoanContract { LoanDateStart = Date.Today };

希望这对您有所帮助。

简单实用,使用asp-format ,例子:

<input asp-for="MyDate" asp-format="{0:dd/MM/yyyy}" class="form-control" />

或者:

@Html.TextBoxFor(model => model.MyDate, "{0:dd/MM/yyyy}", new { @class = "form-control" })

如果在模型中定义不起作用,您可以在视图文件中使用:

@String.Format("{0:dd/MM/yyyy}",ViewBag.TerminoDaAvaliacao)

此 ViewBag 包含一个 DateTime 值。 这种格式定义的时间消失了。 不必在模型文件定义中按日期更改DateTime

我还使用.ToString("d")解决了这个问题。 我收到了“MM/DD/YYYY”的输出。

这可能是对所问问题的错误解决方案,但我希望它对某人有所帮助。 如果您尝试仅输入日期(没有时间),Model.IsValid 将返回验证错误,说明日期输入格式不正确。 要解决此问题,只需将其添加到您的模型中。

[Display(Name = "Date")]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
[DataType(DataType.Date)]
public DateTime Date { get; set; }

在 asp.net 中使用数据属性的好处是 jQuery 客户端验证自动支持。 (由 Asp.Net 生成)

我认为这是 dotnet 核心上 dateformat 转义字符的错误。 以上解决方案都不适合我。 只有这种方法解决了我的问题。 为什么 DateTime.ToString("dd/MM/yyyy") 给我 dd-MM-yyyy?

[DisplayFormat(DataFormatString = "{0:dd'/'MM'/'yyyy}", ApplyFormatInEditMode = true)]

或者

<input asp-for="DateProperty" asp-format="{0:dd'/'MM'/'yyyy}">

在模型中添加 [DataType(DataType.Date)]

[Column(TypeName = "Date")]
[DisplayName("Date of birth")]
[DataType(DataType.Date)] 

(当前为 ASP.NET 6)

几乎所有这些答案(来自@Alex_Jung_89 的答案除外)的问题是他们不尊重线程的当前文化。 如果您在不同的语言环境中操作,那么您使用的自定义字符串将不正确,例如,如果您的用户从fr-FR浏览器点击您,因为他们将月份和日期与美国标准相反。

标签助手在这里工作得最好,没有所有的注释东西会破坏你的模型,并且回到管道中,模型绑定器将在当前的线程文化上工作。

<input type="text" asp-for="Dob" asp-format="{0:d}" />

最好将格式化推迟到视图以保持关注点的清晰分离。

标准格式字符串: https ://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings

对于那些想要在视图中更改模型的日期格式的人,无论模型类如何(这是我期望回答的)。 这适用于 Razorpages 和 MVC。

只需将 .ToString("dd/MM/YYYY") 添加到您正在显示的属性中。

例如

@Model.DateOfBirth.ToString("<Use formatting here>")

如果您只想显示日期的一部分,比如月份和年份,这很好,但在其他地方您需要显示日期和时间。

这有时可能非常有用,

<input asp-for="DateProperty" asp-format="**@Model.DateProperty.ToString($"{0:dd/MM/yyyy}")**">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM