【问题标题】:Get selected date of ajax calendar extender control获取 ajax 日历扩展器控件的选定日期
【发布时间】:2011-11-11 00:53:45
【问题描述】:

我在我的 asp.net 3.5 应用程序中使用了 Ajax 日历扩展器控件(来自 here)。

我的问题:如何从代码隐藏文件中的 Ajax 日历扩展器控件中获取选定的日期?

例如,我从日历中选择 01/01/2011,那么我需要在后面的代码中使用这个日期,因为我需要检查空值。

如有任何疑问,请告诉我。

请指导。谢谢!

问题已用代码更新

 &nbsp; <asp:Label ID="lblStartDate" runat="server" Text="<%$ Resources:Resource, lblStartDate %>" CssClass="boldlabelText"></asp:Label>
                                        &nbsp;<asp:TextBox ID="txtStartDate" runat="server" ReadOnly="true" MaxLength="10"></asp:TextBox>
                                        <asp:ImageButton runat="Server" ID="imgStartDate" ImageUrl="~/Images/Calender.png" AlternateText="Click to show calendar" />
                                        <ajax:CalendarExtender ID="CalStartDate" runat="server" TargetControlID="txtStartDate" Format="yyyy-MM-dd" PopupButtonID="imgStartDate">
                                        </ajax:CalendarExtender>

代码隐藏 (.cs)

if (txtStartDate.Text.Equals(string.Empty))  // The text value always comes null
        {
            lblStartDateM.Visible = true; 
            txtStartDate.BackColor = Color.FromArgb(255, 255, 235);
            blnIsValid = false;
        }

【问题讨论】:

    标签: asp.net ajax asp.net-ajax ajaxcontroltoolkit


    【解决方案1】:

    不要在 TextBox 上设置属性 ReadOnly="true"

    来自Joteke's Blog

    如果 TextBox 的 ReadOnly 属性为“true”,则不会回发数据 加载例如它本质上意味着 TextBox 是只读的 服务器端的观点(客户端的更改将被忽略)。如果你 希望 TB 以“旧方式”使用

    TextBox1.Attributes.Add("readonly","readonly") 
    

    因为这不会影响服务器端功能。

    【讨论】:

    • 非常感谢,对我帮助很大
    【解决方案2】:

    您还可以通过 Request.Form 集合访问只读文本框内容:

    Request.Form[txtStartDate.UniqueID]

    效果和

    一样

    txtStartDate.text

    参考:http://www.aspsnippets.com/Articles/ASP.Net-AJAX-CalendarExtender---Get-selected-date-from-ReadOnly-TextBox.aspx

    【讨论】:

      【解决方案3】:

      试试这个代码。我在我的网站中使用了这段代码,它运行良好。在按钮单击事件中,我可以使用文本框的 .text 属性获取在文本框中输入的日期值。

      <asp:TextBox ID="txtDateFrom" runat="server" Width="70px"></asp:TextBox>
      <ajax:CalendarExtender ID="CalendarExtender1" runat="server" CssClass="MyCalendar" Format="MM/dd/yyyy" TargetControlID="txtDateFrom" Enabled="True"></ajax:CalendarExtender>
      
      <ajax:MaskedEditExtender ID="MaskedEditExtender1" runat="server" AcceptNegative="Left" DisplayMoney="Left" ErrorTooltipEnabled="True" InputDirection="RightToLeft" Mask="99/99/9999" MaskType="Date" TargetControlID="txtTranDateFrom" CultureAMPMPlaceholder="" CultureCurrencySymbolPlaceholder="" CultureDateFormat="" CultureDatePlaceholder="" CultureDecimalPlaceholder="" CultureThousandsPlaceholder="" CultureTimePlaceholder="" Enabled="True"></ajax:MaskedEditExtender>
      

      【讨论】:

      • onkeypress 事件(文本框)是否满足我的要求?
      • .text 文本框的属性总是给出空值(如问题所述)。提供支持链接
      • 因为我的文本框处于只读模式 (readonly=true),所以没有获取值
      【解决方案4】:

      使用文本框中被日历扩展器“扩展”的文本属性

      【讨论】:

      • 我用过。即使选择了日期,该值也始终为空
      • @Xor power 你能把你的代码和标记贴在你使用它的地方吗?
      【解决方案5】:

      不幸的是,如果文本框未被智能感知检测到或嵌入在 GridView 中,则在 Page_Load() 事件的文本框控件中设置 ReadOnly 属性是无用的。

      所以为了避免所有这些令人头疼的问题,我只是将 TextBox 控件变成了“伪”标签控件,并且仍然能够在“标签”上使用 AjaxControlToolKit CalendarExtender

      在您的文本框中输入onKeyPress = "javascript: return false;" onPaste = "javascript: return false;"。这样,即使启用了文本框,用户也无法修改数据,并且您正在强制他们使用 Calendar 控件,这正是您想要的。我们不应该让用户能够输入日期。

      【讨论】:

        猜你喜欢
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多