日期/时间控制asp.net

时间:2014-03-24 15:59:30

标签: c# asp.net

我有一个webform应用程序,可以计算两个日期之间的时差 以格式天数,总小时数,总分钟数给出。

我的标记代码如下:

<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没有天数值的差异。

是否还有其他我不知道的事件触发器?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我同意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行中计算出这样的时间跨度,在创建另一个对象时没有任何意义可以保持你可以像这样访问它的总天数。除非你打算在很多地方使用它,否则可能会创造一个双倍的持有者。

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更改时,页面正在刷新,因为必须将数据提交到页面才能进行服务器端处理。网页事件不像winforms那样工作。