我猜这可能与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中的一个巨大错误?
在Control
或WebControl
内有许多其他控件呈现并且从未遇到过任何问题之前,我已经做了很多次,所以它必须与简单性有关而不是我想这很复杂。
如果有人能帮我解决这个问题,我们将不胜感激。
答案 0 :(得分:0)
那是因为你应该实施INamingContainer Interface
答案 1 :(得分:0)
设置按钮的ID属性。
but.ID = "MyLinkButtonID";
but.Command += new CommandEventHandler(EVENTHANDLER);
如果该按钮始终是该类的成员,则将该按钮添加为成员,并将其添加到OnInit事件中的Controls集合中。
忘记为命令事件添加事件处理程序。
答案 2 :(得分:0)
哎呀!我在踢自己,答案实际上是一个命名容器问题。这是我所能做的所有事情之一就是关注一些细节,这实际上不是问题。
我的自定义控件由另一个控件发出...进入第三个控件。但可能有几个“第三控制”的例子。 (总的来说,我正在制作一些东西,允许我在表格之前和之后放置一个表格控制按钮的副本。主控件确定为给定表格发出哪些按钮。)。
所以“第三个控件”不是命名容器。这就是杀了它。但是我从未对ID冲突有任何错误,它只是没有用。