html5输入类型日期时间值未在ASP.NET webform上显示

spi*_*man 3 asp.net html5 webforms input

编辑 我有一个Asp.Net FormView,带有itemtemplate:

 <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>
Run Code Online (Sandbox Code Playgroud)

当表单处于查看模式时,日期正确显示(当然设置日期时):

在此输入图像描述

但是,当"表单"在"编辑模式"下更改时,将显示type ="datetime-local"的输入,需要用户选择日期.这是Popup显示的:

在此输入图像描述

但是,正如我所看到的那样检查生成的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;">
Run Code Online (Sandbox Code Playgroud)

所以有两个问题:首先是在编辑模式下,我无法看到实际值是多少; 第二,如果我只想改变一天或一小时,我必须重新输入整个日期......

我的问题是:这是Html5计划的行为还是我遗漏了什么?

Ale*_*ici 5

根据W3规范:

value =本地日期和时间

表示本地日期和时间的字符串.以下部分,完全按以下顺序:

  • 一个约会.
  • 文字字符串"T".
  • 一次.

例:

1985-04-12T23:20:50.52

1996-12-19T16:39:57

所以,在你的情况下:

value="2013-05-28T10:00:00"
Run Code Online (Sandbox Code Playgroud)

将工作.

[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>
Run Code Online (Sandbox Code Playgroud)

在您的代码中,定义以下方法:

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;
}
Run Code Online (Sandbox Code Playgroud)