自定义Control中的LinkBut​​ton不呈现ID(或者根本不工作)

时间:2011-02-03 18:17:47

标签: c# asp.net linkbutton

我猜这可能与this有关,但不幸的是,在这种情况下,解决方法似乎不起作用。

在与较大的实现无法工作的挣扎之后,我把它归结为最简单的情况。这不起作用。

   public class MyButton : Control
    {
        public MyButton()
            : base()
        {
            LinkButton but = new LinkButton();
            but.CommandName = "test";
            but.CommandArgument = "test2";
            but.Text = "Click Here";
            Controls.Add(but);
        }
    }

呈现的是:

<a href="javascript:__doPostBack('ctl00$ctl11$ctl07','')">Click Here</a>

这里有两个主要问题。首先,没有身份证。它应该有标记id='ctl00$ctl11$ctl07'。因此即使它会发布,事件永远不会被捕获。

其次,它忽略了CommandName和CommandArgument,它应该呈现__doPostBackWithOptions

我是非常愚蠢的,只是忽略了一些明显的东西,或者这是ASP.NET中的一个巨大错误?

ControlWebControl内有许多其他控件呈现并且从未遇到过任何问题之前,我已经做了很多次,所以它必须与简单性有关而不是我想这很复杂。

如果有人能帮我解决这个问题,我们将不胜感激。

3 个答案:

答案 0 :(得分:0)

那是因为你应该实施INamingContainer Interface

答案 1 :(得分:0)

设置按钮的ID属性。

but.ID = "MyLinkButtonID";
 but.Command += new CommandEventHandler(EVENTHANDLER);

如果该按钮始终是该类的成员,则将该按钮添加为成员,并将其添加到OnInit事件中的Controls集合中。

忘记为命令事件添加事件处理程序。

答案 2 :(得分:0)

哎呀!我在踢自己,答案实际上是一个命名容器问题。这是我所能做的所有事情之一就是关注一些细节,这实际上不是问题。

我的自定义控件由另一个控件发出...进入第三个控件。但可能有几个“第三控制”的例子。 (总的来说,我正在制作一些东西,允许我在表格之前和之后放置一个表格控制按钮的副本。主控件确定为给定表格发出哪些按钮。)。

所以“第三个控件”不是命名容器。这就是杀了它。但是我从未对ID冲突有任何错误,它只是没有用。