16

I have ASP.NET MVC3 installed. I need datepicker with formatted date. I tried this, but it's not working (when passing "{0:dd/MM/yyyy}" as format parameter, it still does not format):

    private static MvcHtmlString FormattedDateTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string format, RouteValueDictionary htmlAttributes)
    {
        var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

        if (metadata.Model != null && metadata.Model as DateTime? != null)
            htmlAttributes.Add("value", string.Format(format, (DateTime)metadata.Model));

        return htmlHelper.TextBoxFor(expression, htmlAttributes);
    }

EDIT: My code works if format is "{0:dd-MM-yyyy}" but not only for "{0:dd/MM/yyyy}"

I know that MVC4 has already this functionality, but unfortunately my project is written on MVC3. Can you help me?

karaxuna
  • 26,752
  • 13
  • 82
  • 117
  • 2
    Possible duplicate of [Date only from TextBoxFor()](http://stackoverflow.com/questions/1961114/date-only-from-textboxfor) – KyleMit Sep 19 '16 at 14:29

5 Answers5

44

The only format I have even gotten to work is this:

@Html.TextBoxFor(m => m.Birthdate, "{0:MM/dd/yyyy}")
Steve Westbrook
  • 1,698
  • 2
  • 20
  • 21
ericbl
  • 441
  • 4
  • 3
  • 2
    Don't forget this will only work with MVC4 or later. – Usman Younas Feb 26 '14 at 11:49
  • 1
    **FYI**: [Many browsers](https://weblog.west-wind.com/posts/2012/nov/08/html5-input-typedate-formatting-issues) and the [`input[type=date]` spec](https://www.w3.org/TR/html-markup/input.date.html) require `"{0:yyyy-MM-dd}"` format. – KyleMit Sep 19 '16 at 14:27
14

The syntax is: @Html.TextBoxFor( expression, string format, object htmlAttributes)

eg:

   @Html.TextBoxFor(x => x.DateUtc, "{0:yyyy-MM-dd HH:mm:ss}",
            new { @class = "form-control", placeholder = "Enter Title", id="myDate"})
ninetiger
  • 1,106
  • 11
  • 12
  • This worked brilliantly for me. Instead of hardcoding the date format, it may be better to use `"{0:d}"` as the string format which would [render the date](https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings) according to the regional settings of the client. – JakeMc Mar 30 '21 at 01:33
3

In your Model, use the following:

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

Here is what it should do in the View:

@Html.EditorFor(model => model.YourDate, new { @class = "date" })

This should give you a date formatted out to the format of dd/MM/yyyy.

IyaTaisho
  • 863
  • 19
  • 42
3

Display will depend on culture. And while in most cases all other answers are correct, it did not work for me. Culture issue will also cause different problems with jQuery datepicker, if attached.

If you wish to force the format escape / in the following manner:

@Html.TextBoxFor(model => model.YourDate, "{0:MM\\/dd\\/yyyy}")

If not escaped for me it show 08-01-2010 vs. expected 08/01/2010.

Also if not escaped jQuery datepicker will select different defaultDate, in my instance it was May 10, 2012.

CrnaStena
  • 3,017
  • 5
  • 30
  • 48
2

this format will help you:

@Html.TextBoxFor(Model => Model._facadeLowdown.DoB, new { @value= Model._facadeLowdown.DoB.HasValue ? Model._facadeLowdown.DoB.Value.ToString("MM/dd/yyyy") : ""
}
Pooya
  • 6,083
  • 3
  • 23
  • 43