2012-12-05 15 views
9

Mam zainstalowany ASP.NET MVC3. Potrzebuję datepicker z sformatowaną datą. Próbowałem, ale to nie działa (przy przejściu "{0: dd/mm/rrrr}" jako parametru formatu, to nadal nie format):Jak sformatować DateTime, który jest wyświetlany przez TextBoxFor() w MVC3?

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: Mój kod działa, jeśli format jest „{ 0: dd-MM-rrrr} "ale nie tylko" {0: dd/MM/rrrr} "

Wiem, że MVC4 ma już tę funkcjonalność, ale niestety mój projekt jest napisany na MVC3. Możesz mi pomóc?

+1

Możliwy duplikat [Date tylko z TextBoxFor()] (http://stackoverflow.com/questions/1961114/date-only-from-textboxfor) – KyleMit

Odpowiedz

1

w modelu, należy użyć następujących:

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

Oto co należy zrobić w widoku:

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

To powinno dać datę sformatowaną się do formatu dd/MM/rrrr.

+0

może miałaś na myśli '[DisplayFormat (DataFormatString =" {0: dd/MM/yyyy} ")]'? –

+0

Tak, moje złe. Przepraszam za to. Skopiowane prosto z mojego kodu i nie zauważyłem, że miałeś nieco inny format. Przepraszam za to. Czy to było btw? – IyaTaisho

+0

Czy wiesz, że EditorFor nie ma argumentu htmlAttribues! –

35

jedyny format Mam nawet dostał się do pracy to:

@Html.TextBoxFor(m => m.Birthdate, "{0:MM/dd/yyyy}") 
+2

Nie zapomnij, że będzie działać tylko z MVC4 lub nowszym. –

+1

** FYI **: [Wiele przeglądarek] (https://weblog.west-wind.com/posts/2012/nov/08/html5-input-typedate-formatting-issues) i ['input [type = date] 'spec] (https://www.w3.org/TR/html-markup/input.date.html) wymaga formatu' '{0: rrrr-MM-dd}" '. – KyleMit

6

Składnia jest następująca: @ Html.TextBoxFor (wyrażenie, format string, htmlAttributes obiekt)

np:

@Html.TextBoxFor(x => x.DateUtc, "{0:yyyy-MM-dd HH:mm:ss}", 
      new { @class = "form-control", placeholder = "Enter Title", id="myDate"}) 
2

Format ten pomoże:

@Html.TextBoxFor(Model => Model._facadeLowdown.DoB, new { @value= Model._facadeLowdown.DoB.HasValue ? Model._facadeLowdown.DoB.Value.ToString("MM/dd/yyyy") : "" 
} 
0

Wyświetlanie zależy od kultury. I podczas gdy w większości przypadków wszystkie inne odpowiedzi są poprawne, to nie działa dla mnie. Problem związany z kulturą spowoduje również inne problemy z datepicker jQuery, jeśli są dołączone.

Jeśli chcesz wymusić format ucieczki/w następujący sposób:

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

Jeśli nie uciekł mi to pokazać 08-01-2010 vs. spodziewane 08/01/2010.

Również jeśli nie uciekł jQuery datepicker wybierze inny defaultDate, w moim przykładzie był to May 10, 2012.

Powiązane problemy