• 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ

如何添加一个动态的按钮并动态的添加事件?

hancec 2004-12-23 05:04:19
我的意思如下:
我想根据用户的要求Response.Write一段HTML代码。。但是在这段代码里包含一个按钮(也可能没有)
我如何让这段Response到客户端的按钮响应一个我在服务器端已经定义好的事件??
...全文
220 点赞 收藏 23
写回复
23 条回复
jujuxys 2005年01月06日
对于N个Button,如果是客户端那么就是event.srcElement了,如果是服务器端,那个object sender不就可以确定了吗?
回复 点赞
shan1119 2005年01月06日
up
回复 点赞
Paradise_heida 2005年01月06日
必须在服务器端动态生成
只运行在客户端的控件无法响应服务器端的事件
回复 点赞
PPLUNCLE 2005年01月06日
up
回复 点赞
wcnyygy 2005年01月06日
呵呵.我随带问一个问题.如题功能我已经做出来了.但是又出现一个新问题.自动生成了N个button但都指向一个click如何确定我是点了那一个button.
回复 点赞
jujuxys 2005年01月05日
我这儿有两种方法,你看合不合适:
1、动态生成按钮,并给控件加事件,但是这种情况,当PostBack后按钮就消失了,其原因是服务器没有存这个控件的状态,也就是LoadViewState时没有它,那么我们需要重载一下LoadViewState事件,在这个事件中再添加这个控件就可以了。也就是 if (!Page.IsPostBack){动态添加控件,添加事件} ,Override LoadViewState(){再加这个控件和事件}
2、另外一种方法,就是页面上放一个隐藏的服务器控件,不如一个TextBox,把它的宽度设为0(如果设Visible = false,那么服务器端不生成其Html,无法通过脚本控制它),PostBack属性设true,对这个TextBox写后台的onchange代码,你Response 出一个客户端按钮,对这个按钮的onclick写_doPostBack(服务器端TextBox,onchange)就可以了.
回复 点赞
悄悄的回来了 2005年01月05日
先要注册事件,再写该事件要执行的代码。
回复 点赞
dwdw 2005年01月05日
在初始化时作控件生成
回复 点赞
hancec 2004年12月23日
<table width="460" border="0" cellpadding="10" cellspacing="0" class="nr-st-9pt-16line">
<tr>
<td>
<p>按钮位置</p>
</td>
</tr>
</table>
比如我根据用户要求,生成了这段html,我要在“按妞位置”这里生成一个按纽并添加一个服务器端的事件
回复 点赞
chriswu 2004年12月23日
我换名了,咯咯
回复 点赞
chriswu 2004年12月23日
不太懂,关注、学习ing...
回复 点赞
hancec 2004年12月23日
问题是这个按钮的位置我也不清楚//所以不能事先用visible来指定
这个按钮的位置是根据用户的一段html代码决定的。。。比如
<div>button<div>。。。然后我就要在button这个位置生成这个可以响应服务器事件的按钮


大家有没有遇到过这种问题?我想了好长时间也想不出来。。如果response.write一个input。。。则因为是客户端生成的,没有办法响应服务器事件
回复 点赞
chriswu 2004年12月23日
在后台代码里为按钮加一个attribute
回复 点赞
goody9807 2004年12月23日
这几天有几人在问类似的问题,“动态加载控件,为什么控件事件不能触发了?”,问题是他们都是在

if (!IsPostBack)
{
//动态产生或装载控件
//也许需要连接控件事件处理函数
//加到父控件的Controls
}

里生成或装载了动态控件。当控件在客户端触发,postback到服务器端时,IsPostBack==true,这些控件没有被重新生成,怎么能触发事件?所以答案是,当你需要动态生成或装载控件时,应该在if (!IsPostBack)之外做。我问为什么想在if (!IsPostBack)之内做呢?回答是想只生成一次,跟在ASPX页面里一样

<form id="form1" runat=server>
<asp:Button id="Button1" runat="server" Text="Button1" OnClick="Button_Click"/>

#%&%#&%^#&,你怎么会认为这个控件只生成一次呢?这些玩意也不是魔术,想生成一个Button对象,你需要用

Button btn = new Button();

需要触发它的Click事件,你需要用

btn.Click += new EventHandler(YourHandler);

即使象包含

<asp:Button id="Button1" runat="server" Text="Button1" OnClick="Button_Click"/>

的页面,它也是被转化成C#或VB文件,编译成assembly,然后再被执行的啊

不信?加一个页面,TestControls.aspx:

<%@ Page Debug="true" %>
<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.SqlClient"%>

<form id="form1" runat=server>
<asp:Button id="Button1" runat="server" Text="Button1" OnClick="Button_Click"/>
<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="false" GridLines="Both">
<Columns>
<asp:TemplateColumn HeaderText="Name">
<ItemTemplate><%# DataBinder.Eval(Container.DataItem,"Name")%></ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</form>
<script language="C#" runat="server">
void Button_Click(Object sender, EventArgs e)
{
Button btn = (Button)sender;
Response.Write(btn.Text + " is clicked<BR>");
}

void Page_Load(Object sender, EventArgs e)
{

Button btn = new Button();
btn.ID = "Button2";
btn.Text = "Button2";
btn.Click += new EventHandler(Button_Click);
form1.Controls.Add(btn);
if (!IsPostBack)
{
SqlDataAdapter da = new SqlDataAdapter("select Name=au_fname + ' ' + au_lname from authors", "server=localhost;database=pubs;uid=sa;pwd=;");
DataTable dt = new DataTable();
da.Fill(dt);
DataGrid1.DataSource = dt.DefaultView;
DataGrid1.DataBind();
}

//}//这是故意的

</script>

把最后一个“}”注释掉
回复 点赞
leihome 2004年12月23日
关注学习ING。。。
回复 点赞
lily4064 2004年12月23日
我也觉得在服务器端生成,通过条件判断,然后决定是否生成该按钮以及相应的事件。
回复 点赞
zyq1215 2004年12月23日
同意楼上,用enable控制
回复 点赞
lily4064 2004年12月23日
我也觉得在服务器端生成比较好,通过条件判断,来决定是否生成这个按钮。
回复 点赞
viznet 2004年12月23日
给点代码来看看
回复 点赞
hancec 2004年12月23日
但是我如何让这个生成的bt显示在我指定的位置呢?
回复 点赞
发动态
发帖子
.NET技术社区
创建于2007-09-28

4.9w+

社区成员

66.8w+

社区内容

.NET技术交流专区
社区公告
暂无公告