C# 控制';ctl02和x27;类型为';按钮';必须放置在runat=server的表单标记中

C# 控制';ctl02和x27;类型为';按钮';必须放置在runat=server的表单标记中,c#,asp.net,controls,C#,Asp.net,Controls,我在尝试以编程方式生成多个按钮时遇到了这个错误。我没有ctl02。。为什么我会犯这样的错误 Button pgs = new Button();//Create New Topic pgs.Width = 20; pgs.Command += obtainTopicsPerPage_Click; pgs

我在尝试以编程方式生成多个按钮时遇到了这个错误。我没有ctl02。。为什么我会犯这样的错误

  Button pgs = new Button();//Create New Topic
                        pgs.Width = 20;                        
                        pgs.Command += obtainTopicsPerPage_Click;
                        pgs.CommandName = tPage.ToString();
                        pgs.Text = tPage.ToString();

                        btns.Add(tPage.ToString());
                        buttons.Add(pgs);
我创建了几个按钮并在列表中循环(按钮)。然后我犯了一个错误:(……为什么

完整设计:

int maximumTopicPages;
int tPage;
int questionNumber=1;
Dictionary<string, List<DisplayAllQuestionsTable>> tPages;
List<Button> buttons = new List<Button>();
protected void Answer_Click(object sender, EventArgs e)
{
    ViewState["SeekPressed"] = "pressed";
    tPages = new Dictionary<string, List<DisplayAllQuestionsTable>>();
    string subTopic = SubTopicDropDownList.SelectedItem.Value;
    List<DisplayAllQuestionsTable> threadsByTopic = new List<DisplayAllQuestionsTable>();
    List<string> btns = new List<string>();

    foreach (var topicKeys in postsByTopic)
    {

           if (topicKeys.Key == subTopic)
            {
                foreach (var item in postsByTopic[topicKeys.Key])
                {
                    questionNumber++;
                    maximumTopicPages++;
                    threadsByTopic.Add(item);//Adds All DisplayAllTables objects
                    //if there are 20 add a button.
                    if (maximumTopicPages == 20)
                    {
                        tPages.Add(tPage++.ToString(), threadsByTopic);//Add a number to the page each time, with a DisplayTable object  
                        //new Button
                        Button pgs = new Button();//Create New Topic
                        pgs.Width = 20;                        
                        pgs.Command += obtainTopicsPerPage_Click;
                        pgs.CommandName = tPage.ToString();
                        pgs.Text = tPage.ToString();

                        btns.Add(tPage.ToString());
                        buttons.Add(pgs);
                        maximumTopicPages = 0;
                        threadsByTopic.Clear();
                    }

                }//number of questions per page
                if (!tPages.ContainsKey((questionNumber / 20).ToString()))
                {
                    tPages.Add((questionNumber / 20).ToString(), threadsByTopic);//If A button is missing add it.
                }
            } 

之后是否将按钮添加到页面?
此外,如果您没有为按钮指定ID,它们将以ctlXXX的形式自动提供一个ID。以后是否将按钮添加到页面? 此外,如果您没有为按钮指定ID,它们将以ctlXXX的形式自动提供ID。您必须检查“按钮”(我认为是占位符)是否位于div或带有runat=“server”的标记中

更新

如果我理解,你可以尝试以下方式:

HtmlForm form = new HtmlForm();

form.Attributes.Add("runat", "server");
form.Controls.Add(buttons);

Page.Controls.Add(form);
(未测试)

您必须检查“按钮”(我认为是占位符)是否位于div或带有runat=“server”的标记中

更新

如果我理解,你可以尝试以下方式:

HtmlForm form = new HtmlForm();

form.Attributes.Add("runat", "server");
form.Controls.Add(buttons);

Page.Controls.Add(form);

(未测试)

在.aspx文件中是什么?具体来说,“按钮”控件是什么?我猜它是一个占位符或面板或类似的东西。在这种情况下,您需要将其添加到.aspx文件中:

...
<body>
<form runat="server">
...
</form>
</body>
...
。。。
...
...
这应该可以解决问题


ASP.NET需要由服务器管理
标记,以便在页面上使用服务器端控件。如果页面上的某个位置已经有
标记,您只需将
runat=“server”
添加到该标记,它就会修复该标记。(假设您尝试将动态创建的按钮添加到的“按钮”控件(占位符或面板或其他任何内容)本身位于
标记之间。)在.aspx文件中是什么?具体来说,“按钮”控件是什么?我猜,它是一个占位符、面板或类似的东西。在这种情况下,您需要将其添加到.aspx文件中:

...
<body>
<form runat="server">
...
</form>
</body>
...
。。。
...
...
这应该可以解决问题

ASP.NET需要由服务器管理
标记,以便在页面上使用服务器端控件。如果页面上的某个位置已经有
标记,您只需将
runat=“server”
添加到该标记,它就会修复该标记。(假设您试图将动态创建的按钮添加到的“按钮”控件(占位符、面板或其他任何东西)本身位于
标记之间。)

其工作状态

请将新的按钮控件从添加到

 protected void btnsubmit_Click(object sender, EventArgs e)
    {
        Button objButton = new Button();
        objButton.Text = "New Button";
        objButton.ID = "randomButton";
        form1.Controls.Add(objButton);                   
    }
这里form1->表单名称可用于.aspx文件,objButton是按钮对象。

它的工作

请将新的按钮控件从添加到

 protected void btnsubmit_Click(object sender, EventArgs e)
    {
        Button objButton = new Button();
        objButton.Text = "New Button";
        objButton.ID = "randomButton";
        form1.Controls.Add(objButton);                   
    }


这里form1->表单名称可用于.aspx文件,objButton是按钮对象。

什么是按钮?请发布表单设计?这是一个简单的列表。请参见上文什么是按钮?请发布表单设计?这是一个简单的列表。参见上文,我如何以编程方式在其周围放置div标记?如果发布aspx html pag我可以给你一个主意。我可以,问题是,我几乎什么都没有放在那里,一切都是通过编程生成的。我放了一个表,称它为“Table2”,然后做了Table2.Rows.Add(…和Page.Controls.Add(Table2).在表格单元格中我添加了所有按钮..表2.在服务器上运行一个页面只能有一个服务器端表单标记。-明白了。看看我是如何将我的按钮放在上面的表中的好吧,你已经有了一个表单!所以你不需要像我的回答中那样添加表单!我正在尝试查看你的代码!那么,我如何以编程方式在它们周围放置一个div标记?如果你发布你的aspx html页面我可以给你一个想法。我可以,问题是,我几乎什么都不放,一切都是通过编程生成的。我放了一个表,称它为“Table2”,然后做了Table2.Rows.Add(…和page.Controls.Add(Table2).在表格单元格中我添加了所有按钮..表2.在服务器上运行一个页面只能有一个服务器端表单标记。-明白了。看看我如何将按钮放入上面的表中好的,你已经有一个表单了!所以你不需要像我的回答中那样添加表单!我正在尝试查看你的代码!按钮是一个列表..我说我将它们输入到一个列表中..但我一直ady有一个表单在服务器上运行..但它无法修复..再次..按钮不是控件您无法分配
runat=“server”
属性有问题。您必须通过标记来分配它。Attributes集合告诉ASP.NET在发送到客户端的HTML中呈现哪些属性,并且只能处理在服务器上解释的标记。但是ASP.NET不知道它应该在服务器上解释标记,除非您添加
runat=标记中的“服务器”
。按钮是一个列表..我说我将它们输入列表..但我已经在服务器上运行了一个表单..但它无法修复..再次..按钮不是控件您无法分配
runat=“服务器“
属性有问题。您必须通过标记来分配它。Attributes集合告诉ASP.NET在发送到客户端的HTML中呈现哪些属性,并且只能处理在服务器上解释的标记。但是ASP.NET不知道它应该在服务器上解释标记,除非您添加
runat。”=标记中的“服务器”
。你应该关心,因为你说“我没有ctl02..为什么我会犯那个错误?”。Locksfree解释了原因。如果你不指定ID,它们将以ctlXXX的形式自动分配。你应该关心,因为你说“我没有ctl02..为什么我会犯那个错误?”?“.Locksfree解释了原因。如果不指定ID,它们将以ctlXXX的形式自动分配。