1

有没有办法将 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. 

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

4

1 回答 1

2

如果您只使用 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 独一无二。

于 2013-06-11T19:51:25.470 回答