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计划的行为还是我遗漏了什么?
根据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)