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

时间:2013-06-11 19:42:45

标签: 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)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. 

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

1 个答案:

答案 0 :(得分:1)

我认为如果你只使用text.ID,ASP.NET会足够聪明地处理它,你不需要添加ContentPlaceHolder1_前缀。

如果这不起作用,您可以使用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 />"));
            }

我认为您可能只想研究差异:我正在使用Nuget的最新ControlToolkit,我正在使用ToolkitScriptManager而不是默认的ScriptManager。对你来说重要的一件事是确保你使text.ID独一无二。