EventHandler的一个问题

perhaps 2003-03-09 01:59:26
一个挺让我迷惑的问题;
在page_Onload中我用了一个table webcontrol,在这table中我添加了一个linkbutton,同时也给这个linkbutton设置的触发事件,如下
TableCell c=new TableCell();
LinkButton mylinkbutton=new LinkButton();
mylinkbutton.Click+=new EventHandler(Update_Click);
mylinkbutton.ID="Update"+i.ToString();//i作为标志区别各个LinkButton
mylinkbutton.Text="Update";
c.Controls.Add(mylinkbutton);

public void Update_Click(Object sender,EventArgs e)
{
Response.Write("Hello ,world!");
}
这样运行是没有任何问题的.可是在页面中还有一个linkbutton,点击之后,会在原来的table后面多添加一个TableRow,而这个TableRow中也包含了上面的TableCell.这一次,我点击新生成的TableCell中的linkbutton,就毫无反应了.
请问这是因为什么啊?
...全文
87 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
winbird101 2003-03-09
  • 打赏
  • 举报
回复
你的代码第二个按钮当然不会触发拉!
因为浏览器模式编程是无状态,无连接的!你在按钮中虽然动态添加了一个按钮事件,
但是postback时,你添加的事件不会被任何机制记住,那么也就不会有任何效果拉!按钮都会丢失!
icanseeyou 2003-03-09
  • 打赏
  • 举报
回复
gz
dragontt 2003-03-09
  • 打赏
  • 举报
回复
你注意到没有
我在你的AddButton事件和Page_Load事件中各加了一段代码

为什么会这个样子呢

因为,服务器端处理客户端的请求的时候,每个页面都是重新生成的
然后根据客户端保存并传递来得ViewState使得服务器端生成的新页面与客户端
当前页面的状态相同
然后,服务器端会根据客户端的请求,来完成任务

你刚刚的代码的问题就是因为,服务器端新生成的页面,并不知道你的客户端现在有一个
名为hello的linkbutton
所以不会去执行它的事件
:)
dragontt 2003-03-09
  • 打赏
  • 举报
回复
你把代码改成这样试试

<html>
<head>
</head>
<script language="C#" runat="server">
public void Page_Load(Object sender, EventArgs e)
{
LinkButton mylinkbutton=new LinkButton();
mylinkbutton.Text="say hello";
mylinkbutton.ID="say";
mylinkbutton.Click+=new EventHandler(Say_Hello);
thisform.Controls.Add(mylinkbutton);

if( ViewState["Test"] != null )
{
AddButton( sender,e );
}
}
public void Say_Hello(Object sender,EventArgs e)
{
Response.Write("Hello,World!");
}
public void AddButton(Object sender,EventArgs e)
{
LinkButton mylinkbutton=new LinkButton();
mylinkbutton.Text="say hello";
mylinkbutton.ID="hello";
mylinkbutton.Click+=new EventHandler(Say_Hello);
thisform.Controls.Add(mylinkbutton);

ViewState["Test"] = 1;
}
</script>
<body>
<form id="thisform" runat="server">
<asp:linkbutton Text="Add Button" OnClick="AddButton" runat="server"/>


</form>
</body>
</html>
dragontt 2003-03-09
  • 打赏
  • 举报
回复
我试了一下
你希望做的事情就是能够动态创建一个Say hello按钮
然后能够处理它的事件对不对?
perhaps 2003-03-09
  • 打赏
  • 举报
回复
我试过了不行哦.
而且更奇怪的是,按照您说的去做,这下子连第一个linkbutton都触发不了事件了.
webdiyer 2003-03-09
  • 打赏
  • 举报
回复
把Page_Load中的代码加在 if(!Page.IsPostBack){ }中试试。
jonsonzxw 2003-03-09
  • 打赏
  • 举报
回复
第一个是怎么引发事件的呢?
perhaps 2003-03-09
  • 打赏
  • 举报
回复
为了说明问题,自己写了个小简单的东西如下:
<html>
<head>
</head>
<script language="C#" runat="server">
public void Page_Load(Object sender, EventArgs e)
{
LinkButton mylinkbutton=new LinkButton();
mylinkbutton.Text="say hello";
mylinkbutton.ID="say";
mylinkbutton.Click+=new EventHandler(Say_Hello);
thisform.Controls.Add(mylinkbutton);
}
public void Say_Hello(Object sender,EventArgs e)
{
Response.Write("Hello,World!");
}
public void AddButton(Object sender,EventArgs e)
{
LinkButton mylinkbutton=new LinkButton();
mylinkbutton.Text="say hello";
mylinkbutton.ID="hello";
mylinkbutton.Click+=new EventHandler(Say_Hello);
thisform.Controls.Add(mylinkbutton);
}
</script>
<body>
<form id="thisform" runat="server">
<asp:linkbutton Text="Add Button" OnClick="AddButton" runat="server"/>


</form>
</body>
</html>

各位高手运行一下看看,大家不要笑我太菜鸟啊.
perhaps 2003-03-09
  • 打赏
  • 举报
回复
上面不是有代码吗?
简而言之,就是两个不同的LinkButton,一个是在Page_Load函数中生成的,一个呢是点击了另外一个Button(<Body>中的Button控件)生成的.
而这两个LinkButton对应了相同的事件,可是前一个可以触发,后一个不行.
baitianhai 2003-03-09
  • 打赏
  • 举报
回复
把你的代码贴出来看看,描述清楚一下
baitianhai 2003-03-09
  • 打赏
  • 举报
回复
你想要干什么那?

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧