asp.net Web 窗体的 DateTime 选取器控件

DateTime Picker control for asp.net webforms

提问人:Ram 提问时间:11/2/2023 最后编辑:Ram 更新时间:11/3/2023 访问量:68

问:

我正在使用 asp.net 网络表单。没有提供日期时间选取器控件。目前,我正在使用文本框来显示日期时间。我想要一个日期时间选取器控件。我试着用谷歌搜索,找不到解决方案。谷歌提供的一切都是由不同公司提供的付费控制权。

我尝试寻找解决方案来查找免费的日期时间选择器控件。我没有成功。我想要一个解决方案来获得免费的日期时间选择器控件。我可以通过在常规文本框上添加 type=date 来获取日期选择器控件。但是日期和时间选择器控件是我想要的。 编辑: 我添加了datetime-local。它给了我一个日期时间选择器控件。棒! <asp:TextBox ID="TextBoxDateTime" runat="server" type="datetime-local"></asp:TextBox>

我几乎接近解决方案。不过,我还有一个小问题需要帮助。它输出的日期时间格式有点奇怪。2023 年 11 月 2 日下午 5 点所选日期的输出为 2023-11-02T17:00。输出完全奇怪。输出采用 yyyy-mm-dd 格式。在时间之前添加了一个额外的 T。我现在需要社区的帮助。我想在 sql server 数据库中插入此值。在当前格式中,即 2023-11-02T17:00,我无法将此值插入数据库。有人可以帮我把这种奇怪的格式转换为数据库友好的日期时间吗?

asp.net Web 表单

评论

0赞 Dai 11/2/2023
为什么您在 2023 年仍在使用 WebForms?自从 MVC 于 2008 年问世以来 ASP.NET 它实际上已经过时了,那是 15 年前......
0赞 Dai 11/2/2023
无论如何,只需使用(并确保考虑用户的时区)<input type="datetime-local" />
0赞 Ram 11/2/2023
@Dai我做到了。谢谢。
0赞 Albert D. Kallal 11/3/2023
请记住,文本框有日期选项,工具箱中还有一个日历控件。在下面查看我的帖子和答案

答:

0赞 Ram 11/2/2023 #1
      <asp:TextBox ID="TextBoxDateTime" runat="server" type="datetime-local"></asp:TextBox>

这条线可以解决问题。type=datetime-local 添加了日期时间选择器。只是一个简单的解决方案。但是 TextBoxDateTime.Text 以 ISO 字符串格式给出值。若要将其转换为 .NET 日期时间,请使用以下代码。

DateTime dateTime = DateTime.Parse(TextBoxDateTime.Text, null, System.Globalization.DateTimeStyles.RoundtripKind);

评论

0赞 Albert D. Kallal 11/3/2023
您根本不需要任何技巧,只需使用简单标准文本框的 textmode 选项,它就会始终为您返回 ISO 格式的日期。
1赞 Albert D. Kallal 11/3/2023 #2

首先,让我们在这里纠正一些错误陈述。

报价:

没有提供日期时间选取器控件。

错!!!!可以肯定的是,这里有一个内置的日历控件,您可以使用,并且还有标准文本框控件的选项。

让我们首先使用标准文本框控件。

将文本框 + 拖放到 Web 窗体时,请注意该文本框的属性表设置。这些:

enter image description here

因此,有各种选择(时间选择器、密码、数字等),并且有多种日期选择。因此,在上面,我们从下拉列表中选择日期。

所以,用这个标记说:

        <h3>Enter a date</h3>
        <asp:TextBox ID="TextBox1" runat="server"
          TextMode="Date"   >

        </asp:TextBox>

        <h3>Code behind button test</h3>
        <asp:Button ID="Button1" runat="server" 
            Text="Test date value - code behind"
            CssClass="btn myshadow"
            OnClick="Button1_Click"
            />

到目前为止,背后的代码是这个简单的存根:

Protected Sub Button1_Click(sender As Object, e As EventArgs)

    Debug.Print($"Value of text box (date) = {TextBox1.Text}")

End Sub

因此,运行上述内容,我们得到/看到以下内容:

enter image description here

对于输出窗口,我们看到:

enter image description here

(我按了 2 次按钮)。

我还应该指出,如果您键入标记(而不是使用如上所示的属性表),那么您可以键入 textmode,点击 =,然后点击 ctrl-space(与 inteli-sense 一样),然后再次获得文本框的选项列表。

这:

enter image description here

因此,显然没有任何加载项,没有任何 JavaScript 代码,asp.net 支持并具有开箱即用的日期选择器功能。请注意日期在浏览器本地时间中的显示方式,但要获取(或设置)文本框,您需要使用 ISO 日期格式。

所以,比如说在页面加载时,我可以像这样将今天的日期设置为“默认”:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then

        TextBox1.Text = DateTime.Today.ToString("yyyy-MM-dd")

    End If

End Sub

(请注意 isPostBack 的所有重要测试,因为我们只希望此类默认值和设置代码在首页加载时运行,而不是用于其他回传。

接下来,如果查看工具箱,应该会看到一个日历控件

这个:

enter image description here

因此,我们可以将其拖到网页上,但该日历控件不是自动弹出控件,而是保持完整视图,因此您可以说将 2 个副本拖到网页上。并不是说日历控件具有广泛的格式设置选项,例如工作日、周末、今天等。

因此,我们将 2 个控件拖放到窗体上,现在我们有了以下标记:

            <div style="float: left">
                <h4>Select Start Date</h4>

                <asp:Calendar ID="dtStart" runat="server" Height="200px" Width="300px"
                    BorderColor="Black"
                    BorderStyle="Solid" BorderWidth="2px">
                    <DayHeaderStyle Height="40px" />
                    <DayStyle BorderStyle="Solid"
                        BorderColor="Black"
                        BorderWidth="1"
                        HorizontalAlign="Right"
                        VerticalAlign="Top" Height="40px" />
                    <OtherMonthDayStyle BackColor="LightSteelBlue" />
                    <SelectorStyle CssClass="btn-info" />

                    <TitleStyle Height="40px" />

                    <TodayDayStyle BackColor="LightSkyBlue" />
                    <WeekendDayStyle BackColor="Ivory" Height="30px" />
                </asp:Calendar>
            </div>


            <div style="float: left; margin-left: 30px">
                <h4>Select End Date</h4>

                <asp:Calendar ID="dtEnd" runat="server" Height="200px" Width="300px"
                    BorderColor="Black"
                    BorderStyle="Solid" BorderWidth="2px">
                    <DayHeaderStyle Height="40px" />
                    <DayStyle BorderStyle="Solid"
                        BorderColor="Black"
                        BorderWidth="1"
                        HorizontalAlign="Right"
                        VerticalAlign="Top" Height="40px" />
                    <OtherMonthDayStyle BackColor="LightSteelBlue" />
                    <SelectorStyle CssClass="btn-info" />

                    <TitleStyle Height="40px" />

                    <TodayDayStyle BackColor="LightSkyBlue" />
                    <WeekendDayStyle BackColor="Ivory" Height="30px" />
                </asp:Calendar>
            </div>

当我们运行上述操作时,我们有这个:

enter image description here

背后的代码可以是这样的:

Protected Sub Button1_Click(sender As Object, e As EventArgs)

    Debug.Print($"Value of text box (date) = {TextBox1.Text}")
    Debug.Print($"Value of Start calendar = {dtStart.SelectedDate}")
    Debug.Print($"Value of End calendar = {dtEnd.SelectedDate}")

End Sub

并输出:

enter image description here

(请注意,日历控件如何返回日期时间数据类型)。

因此,您可以使用文本框,只需设置 TextMode=“date”。

如前所述,您还可以使用日历控件。

所以是的,asp.net 文本框有一个日期模式。(它也有时间模式!!)。

如上所示,在工具箱中,还有一个可以使用的日历控件。

评论

0赞 Ram 11/3/2023
谢谢。我从来不知道TextMode。TextMode = DateTimeLocal 提供日期时间选取器控件。就是这么简单。你的例子干净易懂。