2013-05-29 2 views
3

Редактировать У меня есть Asp.Net FormView, с ItemTemplate:html5 тип ввода значения даты и времени не отображается на ASP.NET веб-формы

<asp:TemplateField HeaderText="DateStart" SortExpression="DateStart"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBoxEditStageDetailsDateStart" type="datetime-local" runat="server" 
          Text='<%# Bind("DateStart") %>' CssClass="TextBoxDateTime"></asp:TextBox> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label1" runat="server" Text='<%# Bind("DateStart") %>'></asp:Label> 
        </ItemTemplate> 
        <ControlStyle Width="160px" /> 
       </asp:TemplateField> 

Когда форма находится в режиме просмотра, дата правильно показал (конечно, если дата установлена):

enter image description here

Однако, когда изменение формы в режиме редактирования, вход с типом = «DateTime-местный» предъявляется но is пусто, требующий от пользователя дата. Это Popup показал:

enter image description here

Однако, как я могу видеть, осматривая сгенерированный источник HTML, значениеустановлено правильно ...

<input name="ctl00$MainContent$StageDetailsView$TextBoxEditStageDetailsDateStart" value="28/05/2013 10:00:00" id="MainContent_StageDetailsView_TextBoxEditStageDetailsDateStart" class="TextBoxDateTime" type="datetime-local" style="width:160px;"> 

Так две проблемы: Первый заключается в том, что в режиме редактирования я не могу видеть, что такое фактическое значение; секунд, если я хочу только изменить день или час, я должен повторно ввести всю дату ...

Мой вопрос: Является ли это планируемым поведением Html5 или что-то не хватает?

+0

Для меня, это не ясно, что вы просите. –

+0

Я сначала протестировал его на IE, и у меня не возникло проблем. Затем я попробовал его в Chrome и понял, что вы имели в виду. –

ответ

5

Согласно W3 specification:

значение = локальная дата и время

Строка, представляющая локальную дату и время. Следующие части, в точно следующий порядок:

  • Свидание.
  • Литеральная строка "T".
  • Время.

Пример:

1985-04-12T23: 20: 50,52

1996-12-19T16: 39: 57

Таким образом, в вашем случае:

value="2013-05-28T10:00:00" 

будет работать.

[UPDATE]

Вы можете использовать следующую aspx разметку:

<asp:TemplateField HeaderText="DateStart" SortExpression="DateStart"> 
    <EditItemTemplate> 
     <asp:TextBox ID="TextBoxEditStageDetailsDateStart" type="datetime-local" runat="server" 
      Text='<%# GetFormattedDate(Eval("DateStart")) %>' CssClass="TextBoxDateTime"></asp:TextBox> 
    </EditItemTemplate> 
    <ItemTemplate> 
     <asp:Label ID="Label1" runat="server" Text='<%# Bind("DateStart") %>'></asp:Label> 
    </ItemTemplate> 
    <ControlStyle Width="160px" /> 
</asp:TemplateField> 

В коде позади, определить следующий метод:

protected string GetFormattedDate(object dateTimeObject) 
{ 
    DateTime dateTime; 
    if (DateTime.TryParse(dateTimeObject.ToString(), out dateTime)) 
    { 
     return String.Format("{0}-{1}-{2}T{3}:{4}:{5}", 
      dateTime.Year, 
      dateTime.Month.ToString().PadLeft(2, '0'), 
      dateTime.Day.ToString().PadLeft(2, '0'), 
      dateTime.Hour.ToString().PadLeft(2, '0'), 
      dateTime.Minute.ToString().PadLeft(2, '0'), 
      dateTime.Second.ToString().PadLeft(2, '0') 
      ); 
    } 
    return null; 
} 
+0

спасибо, ваше решение отлично подходит для показа даты ... , но теперь я не знаю, как привязать его (обновление ничего не делает) – spiderman77

+1

спасибо, чувак! он отлично работает ... –

2

Ok, так что проблема заключается в том, что парсер HTML хочет, чтобы Дата была отформатирована в стандарте ISO 8601.

без необходимости использовать функцию пользовательского формата в коде позади, я закончил с этой декларативной разметкой:

<asp:TextBox ID="TextBoxEditStageDetailsDateStart" type="datetime-local" runat="server" 
Text='<%# Bind("DateStart", "{0:yyyy-MM-ddTHH:mm:ss}") %>' CssClass="TextBoxDateTime"></asp:TextBox> 
+1

Это стандартный формат 's': https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Sortable, чтобы вы могли просто использовать { 0: s} –

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