Чаму DisplayFormat DataFormatString не працуе?

У мяне ёсць ўласцівасць у маёй мадэлі прадстаўлення наступным чынам:

[Editable(false)]
[Display(Name = "Date")]
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
public DateTime MovementDate { get; set; }

Тым не менш, разметка

<td>
    @Html.DisplayFor(modelItem => item.MovementDate)
</td>

аказвае значэнне даты як 2013/05/15 00:00:00 AM .

Што я не так раблю? Мая мадэль:

public class WithDateModel
{
    [DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}")]
    public DateTime TheDate { get; set; }
    public WithDateModel()
    {
        TheDate = DateTime.Now;
    }
}

Маё меркаванне:

@model ParkPay.WebTests.Models.WithDateModel
@Html.DisplayFor(m => m.TheDate)
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

Што візуалізуецца:

2013/05/25 02:23:37 AM
22
@ MattSull87 Я добра ведаю, што структура DateTime ўключае ў сябе раз. Менавіта таму я спрабую выкарыстоўваць <�код дэ> DataFormatString <�код /> ўласцівасць выключыць час з адфарматаваных даты.
дададзена аўтар ProfK, крыніца
Як вы толькі хочаце, каб адлюстраваць дату? <�Код> DateTime структура з'яўляецца выразам даты і часу.
дададзена аўтар MattSull, крыніца
Вы вырашыць гэтую праблему? Адказ любой дапамогі?
дададзена аўтар MattSull, крыніца
Гэта не працуе для мяне, таму што я не выкарыстаў @ Html.DisplayFor() . Я пракаментаваў гэта тут, у выпадку, калі іншыя людзі будуць рабіць тую ж памылку.
дададзена аўтар Jo Smo, крыніца
Выкарыстоўвайце [DataType (DataType.Date], каб вярнуць толькі DATE частка DATETIME.
дададзена аўтар Panoone, крыніца

7 адказы

Калі вы не можаце прымусіць яго працаваць на мадэлі вы можаце паспрабаваць яго ў поле зроку.

@Html.TextBoxFor(m => m.ValidFrom, "{0:dd/MM/yyyy}", new {maxlength = 10})

33
дададзена
@AdamTolley згодны, цалкам анты-інтуітыўным
дададзена аўтар Filip, крыніца
DisplayFormat ігнаруецца ў «TextBoxFor» - Павінен любіць кансістэнцыю Microsoft тут :(
дададзена аўтар Adam Tolley, крыніца
Ці не будзе гэта па сутнасці лічыць «жорсткага кадавання яго», хоць? Я выкарыстоўваю EditorFor() і гэта не працуе, альбо; і я сапраўды хутчэй не прыйдзецца «жорсткі код» яго.
дададзена аўтар Scott K. Fraley, крыніца
Гэта рашэнне працуе для мяне. Акрамя таго, у якасці пабочнага ведама, DisplayFormat ігнаруецца ў «TextBoxFor».
дададзена аўтар Frederik, крыніца

Чаму вы карыстаецеся ApplyFormatInEditMode калі вы ўсталявалі [Editable (хлусня)] ? Усе ApplyFormatInEditMode робіць фармат даты, калі вы маеце яго ў тэкставым полі ці нешта для рэдагавання, якія вы, верагодна, не будзе з-за вышэйзгаданага.

Я быў у стане атрымаць дату для карэктнага адлюстравання з дапамогай наступных дзеянняў:

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

і ў прадстаўленні (з у выніку чаго выхад):

@Html.DisplayFor(x => x.Date)       //2013/05/23

@Model.Date //23/05/2013 09:57:56
@Html.DisplayFor(x => Model.Date) //2013/05/23

Спадзяюся, што гэта дапамагае.

5
дададзена
Значна прасцей мець лішнюю ApplyFormatInEditMode на кожным DisplayFormat атрыбут, чым мець, каб дадаць або выдаліць яго, калі дадаць або выдаліць [Рэдагаванне (хлусня)] атрыбут.
дададзена аўтар ProfK, крыніца

Since You want to exclude the time to get Only Date: At Model:-

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

У Праглядаў: -

    @Html.DisplayFor(model=> model.TheDate)
    @Html.JQueryUI().DatepickerFor(model => model.TheDate)

Падручнік па наступнай спасылцы можа дапамагчы you.it працуе для мяне.

http://ilyasmamunbd.blogspot.com/2014/02/jquery-ui-datepicker-popup-calendar.html

5
дададзена
Настройка ApplyFormatInEditMode зрабіў гэта для мяне.
дададзена аўтар Kai Hartmann, крыніца

Вы павінны анатаваны тып, дата

[DataType(DataType.Date)]
1
дададзена
Гэтая анатацыя стварае HTML5 ўвод даты, а не тэкставае поле, якое можа быць ці можа не быць жаданым вынікам.
дададзена аўтар brichins, крыніца

Гэтая праца для мяне:

У мадэлі:

using System.ComponentModel.DataAnnotations;

namespace Athlete.Models
{
    public class Foo
    {

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

І з пункту гледжання:

<td style="text-align:left;">@Html.DisplayFor(modelItem => item.SignDate)</td>
0
дададзена

У маім выпадку таварыш па камандзе быў вызначаны глабальны шаблон адлюстравання (ака ~ \ Views \ Shared \ DisplayTemplates \ DateTime.cshtml ), што я не зразумеў, узяў верх над маёй [DisplayFormat (DataFormatString = "{0: гггг-мм-дд}")] на маёй мадэлі уласнасці.

Рашэнне было паварушыць радок фармату ў новы агульны шаблон, таму атрыбут змяняецца:

// see ~\Views\Shared\DisplayTemplates\DateMyFormat.cshtml for formatting
[UIHint("DateMyFormat")]
public DateTime MovementDate { get; set; }
0
дададзена

Вам трэба імя уага ў Display Name:
[Дысплей (Name = "<�моцны> MovementDate ")]
грамадскага DateTime <�моцны> MovementDate {атрымаць; набор; }

[Editable(false)]
[Display(Name = "MovementDate")]
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
public DateTime MovementDate { get; set; }
0
дададзена