日期/时间控制 asp.net
Posted
技术标签:
【中文标题】日期/时间控制 asp.net【英文标题】:Date / time control asp.net 【发布时间】:2014-03-24 15:59:29 【问题描述】:我有一个网络表单应用程序,它计算两个日期之间的时间差,然后 以天数、总小时数、总分钟数的格式返回。
我的标记代码如下:
<asp:Label ID="Label20" runat="server" CssClass="label">Resolved Date</asp:Label>
<asp:TextBox ID="TextBox14" runat="server" CssClass="textbox" TextMode="Date" OnTextChanged="TextBox14_TextChanged"></asp:TextBox>
现在 ontextchanged 事件将计算与另一个日期时间文本框的时间差。
我做过这样的事情:。
protected void TextBox14_TextChanged(object sender, EventArgs e)
// get date from first text box
DateTime dold = Convert.ToDateTime(TextBox1.Text);
DateTime dnew = Convert.ToDateTime(TextBox14.Text);
TimeSpan daydif = (dnew - dold);
double dayd = daydif.TotalDays;
Label27.Text = dayd.ToString();
我的问题是,每当没有输出时? label27 没有天数的差异。
还有其他我不知道的事件触发器吗?
感谢您的帮助。
【问题讨论】:
“但我的问题是,每当它没有输出时?”是什么意思? "但是我的问题是,每当没有输出的时候呢?",只需添加一个String.IsNullOrEmpty检查并在标签中显示一个默认值? 你需要发起一个回发到服务器,否则服务器上的代码永远不会运行。尝试将AutoPostBack="True"
添加到<asp:TextBox>
有什么理由不使用日历控件? msdn.microsoft.com/en-us/library/…
【参考方案1】:
我同意 Jon Skeet 我会为此目的使用日历控件,您将遇到文本字段的输入验证问题,您正在使用 Date 对象的日历。首先,您可以将日历字段添加到页面。
<!-- Old Date -->
<asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
<!-- New Date -->
<asp:Calendar ID="Calendar2" OnSelectionChanged="TextBox14_TextChanged" runat="server"></asp:Calendar>
然后在您的 onchanged 方法中,您可以像这样在 1 行中计算时间跨度,创建另一个对象 double 来保存您可以像这样访问它的总天数是没有意义的。除非您要在很多地方使用它,否则可能会创建一个持有人替身。
protected void TextBox14_TextChanged(object sender, EventArgs e)
//Might add some quick validation to make sure a date is selected in both calendars.
// Not sure if you are subtracting old from new or new from old but you can sorta that out
Label20.Text = ((TimeSpan)(Calendar2.SelectedDate - Calendar1.SelectedDate)).TotalDays.ToString();
请记住,当调用 onselection 更改时,页面正在刷新,因为必须将数据提交到页面才能进行服务器端处理。网页事件不像 winform 那样工作。
【讨论】:
以上是关于日期/时间控制 asp.net的主要内容,如果未能解决你的问题,请参考以下文章