Отображение отформатированной даты в редакторе For() - программирование
Подтвердить что ты не робот

Отображение отформатированной даты в редакторе For()

Я использую MVC4 и Entity Framework для разработки веб-приложения для интрасети. У меня есть список лиц, которые я могу редактировать. Когда я получаю доступ к представлению редактирования, в текстовом поле "Дата начала" дата отображается следующим образом: 7/11/2013 00:00:00. Я хочу показать его в формате yyyy/MM/dd. Я попробовал String.Format("{0:yyyy/MM/dd}", item.StartDate), но он не работает. Я также пробовал с аннотацией [DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")], но он тоже не работает.

На мой взгляд, у меня есть следующее:

<div class="editor-field">
        @Html.TextBoxFor(model => model.StartDate, new { @class = "datepicker" })
        @Html.ValidationMessageFor(model => model.StartDate)
    </div>

Любая идея о том, как это сделать?

4b9b3361

Ответ 1

@Html.TextBoxFor(m => m.StartDate, 
    new { @Value = Model.StartDate.ToString("yyyy/MM/dd"), @class="datepicker" })

Ответ 2

enter image description here

Ваш вопрос требует EditorFor() но предоставленный вами код использует TextboxFor().

В вашей модели (например, MyModel.cs) вы должны иметь:

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

В вашем View (например, Index.cshtml) вы просто используете его так, как написали:

@Html.EditorFor(m => m.StartDate, new { htmlAttributes = new { @class = "datepicker" } })

Работает как положено.

Делая это таким образом (вместо того, чтобы изменять способ отображения в вашем представлении), вы можете повторно использовать вашу модель где-то еще, и вам не нужно указывать, как отображать дату в вашем представлении. Так что, если по какой-то причине вам нужно изменить формат отображения, вам нужно будет изменить его только один раз.

Решение также работает для MVC 5.

Ответ 3

Самым простым для меня было добавление атрибута типа,

@Html.EditorFor(model => model.FechaRegistro, new { htmlAttributes = new { @class = "form-control oso" ,@type = "date"  } })

Ответ 4

Html.Editor для работы


@Html.EditorFor(model => model.StartDate, new { htmlAttributes = new { @class = "datepicker", @Value = model.StartDate.ToString("yyyy/MM/dd") } })

Ответ 5

Я здесь noob (а также с MVC), и это всего лишь вариация Maxime с использованием частичного класса...

Если у вас есть модель DB-first и вы не хотите ее изменять напрямую, боясь потерять свои изменения, просто сделайте то же самое в своем собственном частичном классе. Просто добавьте новый класс/файл в папку "Модели" и убедитесь, что он использует то же пространство имен, что и ваши сгенерированные модели.

Итак, как бы вы объявляли метаданные как для форматирования даты, так и для изменения отображаемого имени другого значения (т.е. для сокращения заголовков столбцов в таблице).

namespace MyProjectName.Models
{

    public class MyModelMeta
    {

        [DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]  // format used by Html.EditorFor
        public DateTime StartDate;

        [Display(Name = "User ID")] // abbreviation shown in Html.DisplayNameFor
        public string SomeReallyLongUserIDColumn;

    }

    [MetadataType(typeof(MyModelMeta))]
    public partial class MyModel
    {

    }
}

Ответ 6

попробуйте это.. преобразовать значение даты в htmlAttribute в текстовое поле для..., которое может решить вашу проблему

<div class="editor-field">
    @Html.TextBoxFor(model => model.StartDate, new { htmlAttributes = new { @Value = Model.StartDate.ToString("yyyy/MM/dd"), type = "date"  }})
    @Html.ValidationMessageFor(model => model.StartDate)
</div>