0

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

在与更大的实现无法正常工作之后,我将其归结为最简单的情况。这不起作用。

   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'。因此,即使它会发布,事件也永远不会被捕获。

__doPostBackWithOptions其次,它忽略了 CommandName 和 CommandArgument,无论如何它都应该渲染。

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

我已经做过很多次了,之前在 a Controlor中呈现了许多其他控件WebControl并且从未出现任何问题,所以我猜它一定与简单性而不是复杂性有关。

如果有人可以帮助我解决这个问题,将不胜感激。

4

3 回答 3

0

设置按钮的 ID 属性。

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

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

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

于 2011-02-03T18:47:14.287 回答
0

那是因为你应该实现INamingContainer 接口

于 2011-02-03T18:36:14.213 回答
0

啊!我在踢自己,答案实际上是一个命名容器问题。这是我所能做的就是专注于一些细节的情况之一,这实际上不是问题。

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

所以“第三个控件”不是命名容器。这正在扼杀它。但是我从来没有收到任何关于 ID 冲突的错误,它只是没有用。

于 2011-02-03T19:21:35.063 回答