【问题标题】:Add Ajax CalendarExtender to a dynamic textBox in ASP.NET C#将 Ajax CalendarExtender 添加到 ASP.NET C# 中的动态文本框
【发布时间】:2013-06-11 19:42:44
【问题描述】:

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

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

【问题讨论】:

    标签: c# asp.net .net ajax ajaxcontroltoolkit


    【解决方案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 是唯一的。

    【讨论】:

    • 这仍然会产生相同的错误,基本上:''的 TargetControlID 无效。找不到 ID 为“日期:”的控件。
    • 感谢您对加里森的帮助。我使用普通的 ScriptManager 让它工作。我的问题是我必须从 ID 中删除“:”。一旦我这样做了,它就起作用了。谢谢。
    • 我知道这是 18 个月大,但它只是为我解决了一个问题。升级答案 - 谢谢加里森!
    猜你喜欢
    • 2013-05-22
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多