****关于PlaceHolder控件在运行中生成文框的取值** 如果你不想用Request得到,那你必须保证动态生成文本框的代码放置在Page_Load中每次执行才能够findControl找到,它的状态能够自动保存。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这几天有几人在问类似的问题,“动态加载控件,为什么控件事件不能触发了?”,问题是他们都是在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>把最后一个“}”注释掉,然后在浏览器里向你的服务器调用TestControls.aspx,你将看到编译错误,按 高分求帮助(各位大侠帮帮忙!) js 判断对象为空! vs 2005创建asp.net程序问题 如何初始化数据,使请求减少? treeview控件显示问题 求救 关于继承的问题(来者有分呀) 一个关于frame的问题 求教:通过点击GirdView控件中的超级链接HyperLinkField打开一个新的小窗口页面 如何在C#驗証已注冊用戶! 想不通为什么什么都没法显示!!!请帮帮忙,急!!! 为什么我的滚动条不管用呢. 用showmodaldialog打开页面,此页面上有服务器控件,我也写了<base target="_self">,在有的客户端不会弹出新的也面,但在有的客户端则会弹出
{
//动态产生或装载控件
//也许需要连接控件事件处理函数
//加到父控件的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>把最后一个“}”注释掉,然后在浏览器里向你的服务器调用TestControls.aspx,你将看到编译错误,按