Format date within View in ASP.NET Core MVC

2020-02-28 08:06发布

问题:

I have problem in regarding with converting the datetime to date using a model.

Model from Class Library

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

Model from Project

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

Code in controller

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

View:

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

It show like this: yyyy-MM-dd what I want to achieve is that I want to change it to MM/dd/yyyy. I tried using .ToString("MM/dd/yyyy") but it doesn't work.

回答1:

Try it with this in your model:

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

And In your controller change DateTime to Date :

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

Hope this help you.



回答2:

If when defining in model does not work, you can use inside your view file:

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

This ViewBag contains a DateTime value. The time disapears with this format definition. It is not necessary to change DateTime by Date inside the Model file definition.



回答3:

I have also solved this problem using .ToString("d"). I received output of "MM/DD/YYYY".



回答4:

This might be the wrong solution to the problem being asked, but I hope it helps someone. If you are trying to input only a date (without time) Model.IsValid will throw back a validation error saying the date input format is incorrect. To solve this problem, simply Add this to your model.

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

Using data attributes inside asp.net have the benefit of automatically being supported by jQuery client-side validation. (Generated by Asp.Net)



回答5:

Simple and practical, use asp-format, example:

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

Or:

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


回答6:

For those who get here wanting to change date format of a model in the view regardless of Model class (Its what I expected to be answering). This works in both Razorpages and MVC.

Just add .ToString("dd/MM/YYYY") to the property you're displaying.

e.g.

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

This is great if you only want to show part of a date say month and year, but elsewhere you need to show the day and the time.



回答7:

I think it is a bug for dateformat escape chars on dotnet core. None of above solutions worked for me. Only this method solved my problem. why does DateTime.ToString("dd/MM/yyyy") give me dd-MM-yyyy?

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

or

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