Отображать только дату и время - PullRequest
87 голосов
/ 19 августа 2011

В бритве MVC я помещаю текущую дату в базу данных, как это ..

model.Returndate = DateTime.Now.Date.ToShortDateString();

Поскольку поле базы данных является типом данных datetime, и я преобразовываю текущую дату в строковый формат, это не работает .. как я могу это сделать? Я делаю строковый формат, потому что мне нужна дата в формате мм / дд / гггг, а не в формате мм / дд / гггг чч: мм: сс время ..

EDIT:

В контроллере у меня

var model = new ViewModel();
model.ReturnDate = DateTime.Now;            
return PartialView("PartialView", model);  

В частичном виде у меня есть

@Html.EditorFor(model => model.Returndate)

Здесь отображается дата в виде даты и времени вместе ... Я хочу, чтобы отображалась только дата. Не время Я надеюсь, что это редактирование объясняет лучше.

Ответы [ 11 ]

120 голосов
/ 31 октября 2012

Мне просто пришлось разобраться с этим сценарием - я нашел очень простой способ сделать это, просто аннотируй свою собственность в модели следующим образом:

[DataType(DataType.Date)]
public DateTime? SomeDateProperty { get; set; }

Она скроет кнопку времени от средства выбора датытоже.

Извините, если этот ответ немного запоздал;)

94 голосов
/ 19 августа 2011

Если тип столбца 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)

РЕДАКТИРОВАТЬ:

Привет, ребята, просто хочу уточнить для этого ответа, чтопод моим высказыванием «Если вы используете EditorFor», это означает, что вам нужно иметь шаблон EditorFor для типа значения, которое вы пытаетесь представить.

Шаблоны редактора - это отличный способ управления повторяющимися элементами управления вMVC:

http://coding -in.net / asp-net-mvc-3-how-to-use-editortemplates /

Вы можете использовать их для наивноготипы как String, как я делал выше;но они особенно хороши для того, чтобы позволить вам шаблонировать набор полей ввода для более сложного типа данных.

38 голосов
/ 25 октября 2012

Это работает, если вы хотите отобразить в TextBox:

@Html.TextBoxFor(m => m.Employee.DOB, "{0:dd-MM-yyyy}")
15 голосов
/ 19 августа 2011

Дата / время в базе данных не будут отформатированной версией вообще.Это будет просто дата / время.Как вы отображаете эту дату / время, когда вы извлекаете значение из базы данных, это другой вопрос.Я сильно подозреваю, что вы действительно просто хотите:

model.Returndate = DateTime.Now.Date;

или, возможно,

model.Returndate = DateTime.UtcNow.Date;

Да, если вы посмотрите на базу данных с помощью SQL Server Studio или чего-то еще, вы увидите полночь -но это не имеет значения, и когда вы извлекаете дату из базы данных и отображаете ее для пользователя, , а затем вы можете применить соответствующий формат.

РЕДАКТИРОВАТЬ: Что касается вашего отредактированного вопроса,проблема не в модели, а в том, как вы определяете вид.Вы должны использовать что-то вроде:

@Html.EditorFor(model => model.Returndate.Date.ToString("d"))

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

Это то, о чем я неоднократно говорил - когда вы отображаете дату / время для пользователя , это время для форматирования как даты без времени.

РЕДАКТИРОВАТЬ: Если это не работает, должен быть способ украсить модель или представление строкой форматирования - или что-то в этом роде.Я на самом деле не специалист по MVC, но такое чувство, что должно быть хорошим способом сделать это декларативно ...

8 голосов
/ 23 августа 2016

Вы можете изменить вашу ViewModel, как показано ниже:

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",ApplyFormatInEditMode = true)]
7 голосов
/ 19 августа 2011

Вы можете применить пользовательский формат даты и времени, используя ToString, например:

DateTime.Now.Date.ToString("MM/dd/yyyy");

Более подробную информацию о DateTime.ToString шаблонах форматов можно найти здесь и здесь .

Редактировать: После редактирования вопроса, так же, как другие предложили, вы должны применить формат даты в вашем представлении:

model.Returndate = DateTime.Now.Date;

@Html.EditorFor(model => model.Returndate.Date.ToString("MM/dd/yyyy"))
4 голосов
/ 03 июня 2014

Я не уверен в Razor, но в ASPX вы делаете:

 <%if (item.Modify_Date != null)
  {%>
     <%=Html.Encode(String.Format("{0:D}", item.Modify_Date))%>     
<%} %>

Должно быть что-то подобное в Razor.Надеюсь, это кому-нибудь поможет.

3 голосов
/ 22 сентября 2016

Если у вас есть цикл for, например, приведенный ниже.

Замените @ item.StartDate на @item.StartDate.Value.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>
2 голосов
/ 17 июля 2018

[Display(Name = "Bill Date")] [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] public DateTime BillDate { get; set; }

Теперь ваша дата счета будет отображаться как.

enter image description here

1 голос
/ 15 июля 2018

У меня были некоторые проблемы с другими решениями на этой странице, поэтому я решил добавить это.

@Html.TextBoxFor(m => m.EndDate, "{0:d}", new { @class = "form-control datepicker" })

Так что вам нужно только добавить "{0: d}" во второй параметри тебе надо идти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...