C# 将Ajax CalendarExtender添加到ASP.NET C中的动态文本框#

C# 将Ajax CalendarExtender添加到ASP.NET C中的动态文本框#,c#,asp.net,.net,ajax,ajaxcontroltoolkit,C#,Asp.net,.net,Ajax,Ajaxcontroltoolkit,有没有办法将Ajax CalendarExtender添加到动态ASP.NET文本框控件中?基本上,我正在尝试做以下工作: protected void Page_Load(object sender, EventArgs e) { database.DB myDB = new database.DB(); DataTable myVars = new DataTable(); string myTopicID = (string

有没有办法将Ajax CalendarExtender添加到动态ASP.NET文本框控件中?基本上,我正在尝试做以下工作:

    protected void Page_Load(object sender, EventArgs e)
    {
        database.DB myDB = new database.DB();
        DataTable myVars = new DataTable();

        string myTopicID = (string)Session["myTopicID"];
        bool myInvite = (bool)Session["myInvite"];
        bool mySig = (bool)Session["mySig"];
        string myLogo = (string)Session["myLogo"];
        string myImage = (string)Session["myImage"];
        string myLanguage = (string)Session["myLanguage"];

        myVars = myDB.getVarFields(myTopicID, myLanguage);

        AjaxControlToolkit.CalendarExtender calenderDate = new AjaxControlToolkit.CalendarExtender();

        for (int i = 0; i < myVars.Rows.Count; i++)
        {
            Label label = new Label();
            TextBox text = new TextBox();
            label.Text = Convert.ToString(myVars.Rows[i]["varName"]);
            myPlaceHolder.Controls.Add(label);

            text.ID = Convert.ToString(myVars.Rows[i]["varName"]);

            myPlaceHolder.Controls.Add(new LiteralControl("&nbsp;"));

            myPlaceHolder.Controls.Add(text);

            if (Convert.ToString(myVars.Rows[i]["varName"]).Contains("Date:"))
            {
                calenderDate.TargetControlID = "ContentPlaceHolder1_" + text.ID; 
                myPlaceHolder.Controls.Add(calenderDate);
            }

            myPlaceHolder.Controls.Add(new LiteralControl("<br />"));
        }
    }
The TargetControlID of '' is not valid. A control with ID 'ContentPlaceHolder1_Date:' could not be found. 

我想这是有道理的,因为实际的文本框还不存在。但是有办法解决这个问题吗?

我认为ASP.NET将足够聪明,可以处理它。如果您只使用text.ID,您不需要添加ContentPlaceholder 1_uuu前缀

如果这不起作用,可以使用TextBox的ClientIdMode属性将其设置为静态,那么text.ID肯定会起作用

以下代码在本地为我工作:

AjaxControlToolkit.CalendarExtender calenderDate = new AjaxControlToolkit.CalendarExtender();

            for (int i = 0; i < 2; i++)
            {
                Label label = new Label();
                TextBox text = new TextBox();
                label.Text = Convert.ToString("varName");
                ph1.Controls.Add(label);

                text.ID = "myId" + i;

                ph1.Controls.Add(new LiteralControl("&nbsp;"));

                ph1.Controls.Add(text);


                calenderDate.TargetControlID = text.ID;
                ph1.Controls.Add(calenderDate);


                ph1.Controls.Add(new LiteralControl("<br />"));
            }
AjaxControlToolkit.CalendarExtender CalendarDate=新的AjaxControlToolkit.CalendarExtender();
对于(int i=0;i<2;i++)
{
标签=新标签();
TextBox text=新建TextBox();
label.Text=Convert.ToString(“varName”);
ph1.对照品.添加(标签);
text.ID=“myId”+i;
ph1.Controls.Add(新的LiteralControl(“”);
ph1.控件。添加(文本);
calenderDate.TargetControlID=text.ID;
ph1.对照品。添加(压延日期);
ph1.Controls.Add(新的LiteralControl(“
”); }

我认为您可能需要调查的唯一区别是:我使用的是Nuget最新的ControlToolkit,我使用的是ToolkitScriptManager,而不是默认的ScriptManager。有一件事可能对您很重要,那就是确保text.ID是唯一的。

这仍然会产生相同的错误,基本上是:“”的TargetControlID无效。找不到ID为“Date:”的控件。感谢您的帮助,Garrison。我用普通的脚本管理器让它工作。我的问题是,我必须从ID中删除“:”。一旦我这样做,它就会起作用。谢谢。我知道这已经有18个月了,但它为我解决了一个问题。回答:谢谢你,加里森!