2012-03-30 2 views
2

У меня есть DATETIME ввод в моем ASP.NET MVC3 приложение:MVC3 установленное значение для типа текстового поля DateTime в опере

<div class="editor-field"> 
    @Html.EditorFor(model => model.Article.PublishedDate) 
    @Html.ValidationMessageFor(model => model.Article.PublishedDate) 
</div> 

В Opera это делает специальный вход для даты и времени, но когда я редактировать свои модели подмигнули пусто, и я хочу установить его значение. В других браузерах это обычный текстовый блок, и есть дата-время. Код, который генерируется благодаря этому коду:

<input class="text-box single-line" data-val="true" data-val-required="Publish date is required" id="Article_PublishedDate" name="Article.PublishedDate" type="datetime" value="30.3.2012 10:00:00" data-default-value=""/> 

Как исправить это и установить дату и время в Opera?

ответ

5

Вам нужно форматировать DateTime в соответствии с RFC3339 стандартной

HTML5 ввода даты и времени спецификации: http://dev.w3.org/html5/markup/input.datetime.html

Так ваше значение должно быть отформатирована что-то вроде этого:

<input ... type="datetime" value="2012-03-30T10:00:00" ... /> 

Чтобы отформатировать в качестве RFC3339 вы можете позвонить:

DateTime.ToString("yyyy-MM-ddThh:mm:ssZ"); 

Вы можете сделать это, добавив DisplayFormatAttribute вам Article.PublishedDate:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-ddThh:mm:ssZ}")] 
public DateTime PublishedDate { get; set; } 

Проблема в настоящее время (по крайней мере, для меня) в том, что свойство теперь всегда остается отформатированный как это. Вы можете использовать EditorFor шаблон для этого:

@model DateTime? 

@{ 
    var attributes = new Dictionary<string, object>(); 

    attributes.Add("type", "datetime"); 

    attributes.Add("class", "text-box single-line"); 

    //since this is a constraint, IsRequired and other constraints 
    //won't necessarily apply in the browser, but in case script 
    //turns off readonly we want the constraints passed 
    if (ViewData.ModelMetadata.IsReadOnly) 
    { 
     attributes.Add("readonly", "readonly"); 
    } 

    if (ViewData.ModelMetadata.IsRequired) 
    { 
     attributes.Add("required", "required"); 
    } 
} 
@Html.TextBox("", Model.HasValue ? Model.Value.ToUniversalTime().ToString("yyyy-MM-ddThh:mm:ssZ") : String.Empty, attributes) 

на основе DateTime.cshtml

А для местных дат:

@model DateTime? 
@{ 
    var attributes = new Dictionary<string, object>(); 

    attributes.Add("type", "datetime-local"); 
    attributes.Add("class", "text-box single-line"); 

    if (ViewData.ModelMetadata.IsRequired) 
    { 
    attributes.Add("required", "required"); 
    } 
} 
@Html.TextBox("", Model.HasValue ? Model.Value.ToLocalTime().ToString("yyyy-MM-ddTHH:mm:ss") : String.Empty, attributes) 

на основе DateTime-Local.cshtml

+0

подмигнули именно то, что я искал но у меня проблема, когда я добавляю или редактирую статью. Он получает время от ввода + 2 часа, а когда редактирую статью во входных данных, есть 04:02 и должно быть 16:02. Я думаю, что эти проблемы связаны с чем-то вроде конвертирования между 24 часами/12-часовым временем, но не знают, как это исправить. –

+0

Вы можете попробовать использовать , который использует следующий формат: DateTime.ToString ("yyy-MMM-ddThh: mm: ss") –

+0

Добавлены некоторые шаблоны EditorFor, я использую их вместо DisplayFormatAttribute. Вы должны поместить их в папку «Views/Shared/EditorTemplates» –

0

Способ, которым HTML визуализируется MVC, не может быть изменен между браузерами.

type="datetime" новый тип входа в HTML5 (documentation)

Я подозреваю, что вы используете старую версию оперы, которая еще не поддерживает этот тип входа.

 Смежные вопросы

  • Нет связанных вопросов^_^