none
取不到ajax calendarextender控件的返回值 RRS feed

  • 问题

  • 使用CalendarExtender后TextBox中可以显示选择的日期,但是取不到TextBox.Text的值,例如想把TextBox.Text赋给Label.Text,但总是为空,请问怎么解决?
    2012年4月1日 4:00

答案

  • 你好,

    我明白你的意思,正常情况下前台就是显示年月日的,只不过你在使用这个日期时不想要日,而只要年月,我的意思就是你在后头用c#对得到的年月日做一个处理只要年月,这样应该没问题的。


    Please mark the replies as answers if they help or unmark if not.
    If you have any feedback about my replies, please contact msdnmg@microsoft.com
    Microsoft One Code Framework

    2012年4月5日 7:59
    版主

全部回复

  • 因為CalendarExtender把選擇的日期設定給TextBox是Client端的動作,如果你要再把TextBox.Text設定給Label,可以透過像是Button做PostBack,來回到Server端去指定值給Label。

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CalDemo.aspx.cs" Inherits="WebApplication2.CalDemo" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
        </ajaxToolkit:ToolkitScriptManager>
        <div>
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
            <br />
            <asp:TextBox ID="TextBox1"
                runat="server"></asp:TextBox>
            <ajaxToolkit:CalendarExtender ID="TextBox1_CalendarExtender" runat="server" 
                Enabled="True" TargetControlID="TextBox1">
            </ajaxToolkit:CalendarExtender>
            <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
            <br />
        </div>
        </form>
    </body>
    </html>
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace WebApplication2
    {
        public partial class CalDemo : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
            }
    
            protected void Button1_Click(object sender, EventArgs e)
            {
                Label1.Text = TextBox1.Text;
            }
        }
    }

    或是你可以用另外一種作法,但由於在Client端設定Label.Text,PostBack回到Server端之後值會被清空,所以我用Hidden欄位來暫存TextBox.Text,回到Server端在指定給Label。

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CalDemo.aspx.cs" Inherits="WebApplication2.CalDemo" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script type="text/javascript">
            function SetLableText() {
                var txt = $get('TextBox1');
                var lbl = $get('Label1');
                var hid = $get('HiddenField1');
                lbl.innerText = txt.value;
                hid.value = txt.value;
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
        </ajaxToolkit:ToolkitScriptManager>
        <div>
            <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
            <br />
            <asp:TextBox ID="TextBox1" onchange="SetLableText();"
                runat="server"></asp:TextBox>
            <asp:HiddenField ID="HiddenField1" runat="server" />
            <ajaxToolkit:CalendarExtender ID="TextBox1_CalendarExtender" runat="server"
                Enabled="True" TargetControlID="TextBox1">
            </ajaxToolkit:CalendarExtender>
            <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
            <br />
        </div>
        </form>
    </body>
    </html>
    

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace WebApplication2
    {
        public partial class CalDemo : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
            }
    
            protected void Button1_Click(object sender, EventArgs e)
            {
                Label1.Text = HiddenField1.Value;
                Response.Write(Label1.Text);
            }
        }
    }


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年4月1日 6:43
  • 你是怎么取TextBox1.Text的值?

    2012年4月1日 12:41
  • 你好,

    请看下面这个demo,里面用到了给textbox赋值:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Calendar_limit.aspx.cs" Inherits="test7" %>
    
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    
        <script type="text/javascript">
            function checkDate(sender, args) {
                if (sender._selectedDate < new Date()) {
                    alert("You cannot select a day earlier than today!");
                    sender._selectedDate = new Date();                
                    // set the date back to the current date
                    sender._textbox.set_Value(sender._selectedDate.format(sender._format))
                }
            }
        </script>
    
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
        </asp:ToolkitScriptManager>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Date" OnClientClick="test()" />
        <asp:CalendarExtender ID="CalendarExtender1" BehaviorID="CalendarExtender1" runat="server" TargetControlID="TextBox1" PopupButtonID="Button1"
            OnClientDateSelectionChanged="checkDate">
        </asp:CalendarExtender>
        </form>
    </body>
    </html>


    Please mark the replies as answers if they help or unmark if not.
    If you have any feedback about my replies, please contact msdnmg@microsoft.com
    Microsoft One Code Framework

    2012年4月3日 7:38
    版主
  • 谢谢你的解答,另外我还想问一下我选择日期在TextBox显示包含年月日三项,但是我在对数据库进行操作时最需要用到年月连接起来的字符串,例如"2012-3"这样的格式,请问如何操作才能做到在TextBox中显示年月日三项,但是只利用年和月这种效果?谢谢。

    2012年4月5日 6:33
  • 谢谢你的解答,另外我还想问一下我选择日期在TextBox显示包含年月日三项,但是我在对数据库进行操作时最需要用到年月连接起来的字符串,例如"2012-3"这样的格式,请问如何操作才能做到在TextBox中显示年月日三项,但是只利用年和月这种效果?谢谢。

    可以用Format来配置

     <asp:TextBox runat="server" ID="TextBox1" />
        <asp:CalendarExtender ID="CalendarExtender1" runat="server" TargetControlID="TextBox1" Format="yyyy-MM">
        </asp:CalendarExtender>
        </form>


    2012年4月5日 7:11
  • 你好,

    其实这个你可以在后台处理textbox的日期时做一个转换就可以的,然后把转换后的进行数据操作。


    Please mark the replies as answers if they help or unmark if not.
    If you have any feedback about my replies, please contact msdnmg@microsoft.com
    Microsoft One Code Framework

    2012年4月5日 7:20
    版主
  • 你可能没明白我的意思,我想让TextBox中显示年月日三项,但是在下面使用时只需要年和月。
    2012年4月5日 7:56
  • 你好,请问如何操作?
    2012年4月5日 7:56
  • 你好,

    我明白你的意思,正常情况下前台就是显示年月日的,只不过你在使用这个日期时不想要日,而只要年月,我的意思就是你在后头用c#对得到的年月日做一个处理只要年月,这样应该没问题的。


    Please mark the replies as answers if they help or unmark if not.
    If you have any feedback about my replies, please contact msdnmg@microsoft.com
    Microsoft One Code Framework

    2012年4月5日 7:59
    版主