【问题标题】:Textbox should only accept date文本框应该只接受日期
【发布时间】:2014-03-03 17:43:49
【问题描述】:

我有一个 Web 表单,其中有几个 date 字段,我正在使用 Ajax 日历让用户输入日期,我想限制用户输入除日期以外的额外信息,甚至不输入除了日历扩展器的值之外,能够在文本框中键入任何内容。我正在使用 ASP.NET、VB.NET 和 SQL Server 2008 数据库

我的日期格式是dd-MMM-yy

我试过了:

Enable = false 

但它没有将日期保存到数据库中

下面是我的代码示例:

<asp:TextBox ID="TextBox5" runat="server" Width="150px" style="margin-top: 0px" 
                            ReadOnly="False" CausesValidation="True"></asp:TextBox>

<asp:CalendarExtender ID="TextBox5_CalendarExtender" runat="server" Format="dd-MMM-yy" PopupButtonID="ImageButton1" TargetControlID="TextBox5">
</asp:CalendarExtender>

感谢您的帮助

谢谢

【问题讨论】:

  • 你想在客户端还是服务器上验证这个?如果在客户端上,这是您应该做的,您需要编写一些 JavaScript 来为您验证控件。 stackoverflow.com/questions/6177975/… 有几个例子说明如何做到这一点。
  • 我不确定我是否理解你想要做什么。您是否希望将正确的值保存到数据库中?或者您是否希望实现一个输入掩码,以便用户只能输入日期,它只允许用户只输入整数并自动添加斜杠 (/)?
  • 我正在尝试查看用户是否只能通过 ajax 日历输入日期而无法在文本框中输入任何内容
  • 我要在服务器上验证

标签: asp.net sql vb.net sql-server-2008


【解决方案1】:

首先,您需要在后面的代码中将文本框设置为“只读”,通常在 Page_Load 事件中,如下所示:

TxtDate.Attributes.Add("readonly","readonly");

接下来,在标记中修改文本框的设计,如下所示:

   <asp:TextBox ID="TxtDate" runat="server" Width="150px"></asp:TextBox>

    <a href="JavaScript:clearText('<%=TxtDate.ClientID %>')">
    <img alt="" src="../clear.png"></img></a>
    <asp:CalendarExtender ID="CalendarExtender1" runat="server" Enabled="True" 
    Format="dd-MMM-yy" PopupPosition="Right" TargetControlID="TxtDate">      
</asp:CalendarExtender>

最后添加这个小脚本来清除日期:

   <script type="text/javascript">
        function clearText(ctrl) {
            document.getElementById(ctrl).value = "";
        };

通过这样做,您将有一个文本框,点击它会弹出日历,不允许用户输入,当用户点击与文本框关联的“清除”图像时,它会清除文本。

【讨论】:

  • Yuriy 是对的,ReadOnly 会阻止回发,并且“this.blur()”经常会混淆 cal 弹出窗口。对我最有效的是添加一个 asp:CompareValidator 设置为日期。他们可以在文本框中输入,但必须是有效日期。
【解决方案2】:

不要设置ReadOnly = TrueEnabled = False,这会阻止值被回发。您只需要阻止用户交互,同时允许值在其他情况下是可更新的。一种方法是防止字段获得焦点,尝试添加此属性:

onfocus = "this.blur();"

更多信息请查看this post

【讨论】:

  • 6 年后:很好的解决方案,但会导致日期选择器被视为对话框。在关闭日期选择器之前,无法在页面上执行任何操作。
【解决方案3】:

设置只读属性不会导致服务器端进程。我们可以使用 contentEditable="false" 它将在服务器端可用

【讨论】:

    猜你喜欢
    • 2022-06-28
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多