Отображение только даты и нет времени



в 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)


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

590   11  

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}" во втором параметре, и вы должны быть хорошо идти.

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

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

enter image description here

Comments

    Ничего не найдено.