Отображение только даты и нет времени
в MVC razor, я ставлю текущую дату в базе данных, как это..
model.Returndate = DateTime.Now.Date.ToShortDateString();
поскольку поле базы данных является типом данных datetime, и я преобразую текущую дату в строковый формат, это не работает.. как я могу это сделать? Я делаю формат строки, потому что мне нужна дата в формате mm/dd/yyyy, а не в формате mm/dd/yyyy hh:mm:ss time..
EDIT:
в контроллере у меня есть
var model = new ViewModel();
model.ReturnDate = DateTime.Now;
return PartialView("PartialView", model);
в partialview, у меня есть
@Html.EditorFor(model => model.Returndate)
Это где его отображение даты как дата и время вместе... Я хочу, чтобы отображалась только дата. Не время. Я надеюсь, что это редактирование объясняет лучше.
11 ответов:
если тип столбца DateTime в SQL, то он будет хранить время, когда вы передаете один или нет.
было бы лучше сохранить дату правильно:
model.ReturnDate = DateTime.Now;а затем отформатируйте его, когда вам нужно его отобразить:
@Html.Label(Model.ReturnDate.ToShortDateString())или если вы используете EditorFor:
@Html.EditorFor(model => model.ReturnDate.ToShortDateString())или
@Html.EditorFor(model => model.ReturnDate.ToString("MM/dd/yyyy"))чтобы добавить свойство к вашей модели добавьте этот код:
public string ReturnDateForDisplay { get { return this.ReturnDate.ToString("d"); } }затем в PartialView:
@Html.EditorFor(model => model.ReturnDateForDisplay)EDIT:
Привет, ребята, просто хочу уточнить для этого ответа, что, говоря "если вы используете EditorFor", это означает, что вам нужно иметь шаблон EditorFor для типа значения, которое вы пытаетесь представить.
Шаблоны редактора-Это классный способ управления повторяющимися элементами управления в MVC:
http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/
вы можете использовать их для наивных типов, таких как Строка, как я сделал выше; но они особенно хороши для того, чтобы позволить вам шаблон набора полей ввода для более сложного типа данных.
просто пришлось иметь дело с этим сценарием самому-нашел очень простой способ сделать это, просто аннотировать свое свойство в модели следующим образом:
[DataType(DataType.Date)] public DateTime? SomeDateProperty { get; set; }он будет скрывать кнопку времени от выбора даты тоже.
Извините, если этот ответ немного поздно ;)
это работает, если вы хотите отобразить в TextBox:
@Html.TextBoxFor(m => m.Employee.DOB, "{0:dd-MM-yyyy}")
дата / время в базе данных не будет в формате версия на всех. Это будет просто сама дата/время. Как ты дисплей что дату/время, когда вы извлекаете значение из базы данных-это совсем другое дело. Я сильно подозреваю, что вы действительно просто хотите:
model.Returndate = DateTime.Now.Date;или, возможно,
model.Returndate = DateTime.UtcNow.Date;да, если вы посмотрите на базу данных с помощью SQL Server Studio или что-то еще, теперь вы увидите полночь - но это не имеет значения, и когда вы получаете дату из базы данных и отобразить его для пользователя, затем вы можете применить соответствующий формат.
EDIT: что касается вашего отредактированного вопроса, проблема не в модели - это то, как вы указываете представление. Вы должны использовать что-то вроде:
@Html.EditorFor(model => model.Returndate.Date.ToString("d"))здесь
d- это стандартный спецификатор формата даты и времени для короткого шаблона даты (что означает, что он будет учитывать текущие культурные настройки).Это немного у меня есть повторял неоднократно-что когда ты отображение даты / времени для пользователя, это время, чтобы отформатировать его как дату без времени.
EDIT: если это не работает, должен быть способ украсить модель или вид с помощью строки формата - или что-то в этом роде. Я на самом деле не человек MVC, но он чувствует, как там должно чтобы быть хорошим способом сделать это декларативно...
вы можете изменить ViewModel, как показано ниже:
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",ApplyFormatInEditMode = true)]
вы можете применить пользовательский формат даты и времени, используя
ToStringкак:DateTime.Now.Date.ToString("MM/dd/yyyy");подробнее о
DateTime.ToStringформаты шаблон можно найти здесь и здесь.Edit: после редактирования вашего вопроса, как и то, что другие предложили вам применить формат даты на вашем представлении:
model.Returndate = DateTime.Now.Date; @Html.EditorFor(model => model.Returndate.Date.ToString("MM/dd/yyyy"))
Я не уверен в бритве, но в ASPX вы делаете:
<%if (item.Modify_Date != null) {%> <%=Html.Encode(String.Format("{0:D}", item.Modify_Date))%> <%} %>должно быть что-то подобное в Razor. Надеюсь, это кому-то поможет.
Если у вас есть цикл for, как показано ниже.
изменить @item.StartDate to @ item.Дата начала.Значение.ToShortDateString()
это уберет время на всякий случай, если вы не можете аннотировать свое свойство в модели, как в моем случае.
<table> <tr> <th>Type</th> <th>Start Date</th> </tr> @foreach (var item in Model.TestList) { <tr> <td>@item.TypeName</td> <td>@item.StartDate.Value.ToShortDateString()</td> </tr> } </table>
вы можете просто преобразовать в тип datetime. Что-то вроде:
@Convert.ToString(string.Format("{0:dd/MM/yyyy}", Model.Returndate))
У меня были некоторые проблемы с другими решениями на этой странице, Я решил отказаться от этого.
@Html.TextBoxFor(m => m.EndDate, "{0:d}", new { @class = "form-control datepicker" })Так что вам нужно только добавить " {0: d}" во втором параметре, и вы должны быть хорошо идти.

Comments