Ответ 1
@Html.TextBoxFor(m => m.StartDate,
new { @Value = Model.StartDate.ToString("yyyy/MM/dd"), @class="datepicker" })
Я использую 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>
Любая идея о том, как это сделать?
@Html.TextBoxFor(m => m.StartDate,
new { @Value = Model.StartDate.ToString("yyyy/MM/dd"), @class="datepicker" })
Ваш вопрос требует 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.
Самым простым для меня было добавление атрибута типа,
@Html.EditorFor(model => model.FechaRegistro, new { htmlAttributes = new { @class = "form-control oso" ,@type = "date" } })
Html.Editor для работы
@Html.EditorFor(model => model.StartDate, new { htmlAttributes = new { @class = "datepicker", @Value = model.StartDate.ToString("yyyy/MM/dd") } })
Я здесь 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
{
}
}
попробуйте это.. преобразовать значение даты в 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>