想做一个简单的功能
点击Button1动态生成一个Button2(Button2是不存在的,是动态生成的,回传后会消失),点击Button2能运行服务器端的一段代码,要求:Button2的onclick事件代码不写在js中,回传后button2还在。代码:public partial class Default3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
protected void Button1_Click(object sender, EventArgs e)
{
Button L_Button = new Button();
L_Button.ID = "Button2";
L_Button.Text = "输出";
L_Button.Attributes.Add("runat", "server");
L_Button.BackColor = System.Drawing.Color.Blue;
L_Button.ForeColor = System.Drawing.Color.Wheat;
L_Button.Click += new EventHandler(this.CCC);//这句话我试着写的,发觉无效
Panel1.Controls.Add(L_Button); }
protected void CCC(object sender, EventArgs e)
{
Response.Write("XXX");
}
}我是希望点击button2能够运行CCC方法,该怎么写?
这个我可以利用ajax做
写个L_Button.Attributes.Add("OnClick","Button2_Click");然后在前台写一个function Button2_Click()
{
//调用ajax引擎,执行CCC函数
...
}但是我现在想要不借助js和ajax不知该如何实现~~
请各位高手支招!
点击Button1动态生成一个Button2(Button2是不存在的,是动态生成的,回传后会消失),点击Button2能运行服务器端的一段代码,要求:Button2的onclick事件代码不写在js中,回传后button2还在。代码:public partial class Default3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
protected void Button1_Click(object sender, EventArgs e)
{
Button L_Button = new Button();
L_Button.ID = "Button2";
L_Button.Text = "输出";
L_Button.Attributes.Add("runat", "server");
L_Button.BackColor = System.Drawing.Color.Blue;
L_Button.ForeColor = System.Drawing.Color.Wheat;
L_Button.Click += new EventHandler(this.CCC);//这句话我试着写的,发觉无效
Panel1.Controls.Add(L_Button); }
protected void CCC(object sender, EventArgs e)
{
Response.Write("XXX");
}
}我是希望点击button2能够运行CCC方法,该怎么写?
这个我可以利用ajax做
写个L_Button.Attributes.Add("OnClick","Button2_Click");然后在前台写一个function Button2_Click()
{
//调用ajax引擎,执行CCC函数
...
}但是我现在想要不借助js和ajax不知该如何实现~~
请各位高手支招!
L_Button.Attributes.Add("runat", "server");
L_Button.BackColor = System.Drawing.Color.Blue;
L_Button.ForeColor = System.Drawing.Color.Wheat;
L_Button.Click += new EventHandler(this.CCC);//这句话我试着写的,发觉无效
换成
L_Button.BackColor = System.Drawing.Color.Blue;
L_Button.ForeColor = System.Drawing.Color.Wheat;
L_Button.Click += new EventHandler(L_Button_Click );
protected void L_Button_Click (object sender, EventArgs e)
{
Response.Write("XXX");
}
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class Default9 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
Button L_Button = new Button();
L_Button.ID = "Button2";
L_Button.Text = "输出";
L_Button.Attributes.Add("runat", "server");
L_Button.BackColor = System.Drawing.Color.Blue;
L_Button.ForeColor = System.Drawing.Color.Wheat;
L_Button.Click += new EventHandler(L_Button_Click);
this.form1.Controls.Add(L_Button);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
} void L_Button_Click(object sender, EventArgs e)
{
Response.Write("dd");
}
}
{
if (IsPostBack)
{
Panel1.Controls.Add(Build_Button());
}
} protected void Button1_Click(object sender, EventArgs e)
{
Panel1.Controls.Add(Build_Button());
}protected Button Build_Button()
{
Button L_Button = new Button();
L_Button.ID = "Button_2";
L_Button.Text = "输出";
L_Button.Attributes.Add("runat", "server");
L_Button.BackColor = System.Drawing.Color.Blue;
L_Button.ForeColor = System.Drawing.Color.Wheat;
//Response.Write("<SCRIPT> function DDD() {alert('XXXX');} </SCRIPT>");
//L_Button.Attributes.Add("OnClick", "DDD()");
L_Button.Click += new EventHandler(L_Button_Click);
return (L_Button);
}protected void L_Button_Click(object sender, EventArgs e)
{
Response.Write("XXX");
}
现在的问题是我希望点击了Button1之后才出现这个动态加载的[输出]按钮,但是如我上面这样写任何回传都会加载这个按钮,并且点击Button1时会出现两个[输出]按钮
我想到的解决方法是在protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
if([输出]按钮不存在)
{
Panel1.Controls.Add(Build_Button());
}
}
}
现在的问题是怎么判断该按钮不存在呢?我试着用request.form[],但是按钮不被包含在表单内提交,除非是它自身被点击的时候。
一个解决办法是可以用session存一个变量来指示,但是有没有别的办法可以直接获取浏览器端该按钮的状态呢(比方说能让form每次都提交该按钮的text,如果取不到说明该按钮不存在)?
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class Default9 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
if (ViewState["flag"] != null)
{
this.form1.Controls.Add(Build_Button());
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (ViewState["flag"] == null)
{
this.form1.Controls.Add(Build_Button());
ViewState["flag"] = true;
}
} void L_Button_Click(object sender, EventArgs e)
{
Response.Write("dd");
} Button Build_Button()
{
Button L_Button = new Button();
L_Button.ID = "Button2";
L_Button.Text = "输出";
L_Button.Attributes.Add("runat", "server");
L_Button.BackColor = System.Drawing.Color.Blue;
L_Button.ForeColor = System.Drawing.Color.Wheat;
L_Button.Click += new EventHandler(L_Button_Click);
return L_Button;
}}
下面是我经过测试了的代码: protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//Session["Button_2_Exist"] = false;//用来指示其他控件的回传是否创建该按钮
ViewState["Button_2_Exist"] = false;
}
if (IsPostBack)
{
if (Request.Form["Button1"] == null)//用来指示button1引发的回传是否创建该按钮
{
if ((bool)ViewState["Button_2_Exist"])
{
Panel1.Controls.Add(Build_Button());
}
}
}
} protected void Button1_Click(object sender, EventArgs e)
{
if (!(bool)ViewState["Button_2_Exist"])
{
Panel1.Controls.Add(Build_Button());
ViewState["Button_2_Exist"] = true;
}
else
{
ViewState["Button_2_Exist"] = false;
}
}protected Button Build_Button()
{
Button L_Button = new Button();
L_Button.ID = "Button_2";
L_Button.Text = "输出";
L_Button.Attributes.Add("runat", "server");
L_Button.BackColor = System.Drawing.Color.Blue;
L_Button.ForeColor = System.Drawing.Color.Wheat;
//Response.Write("<SCRIPT> function DDD() {alert('XXXX');} </SCRIPT>");
//L_Button.Attributes.Add("OnClick", "DDD()");
L_Button.Click += new EventHandler(L_Button_Click);
return (L_Button);
} protected void L_Button_Click(object sender, EventArgs e)
{
Response.Write("XXX");
}
下面是我经过测试了的代码: protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//Session["Button_2_Exist"] = false;//用来指示其他控件的回传是否创建该按钮
ViewState["Button_2_Exist"] = false;
}
if (IsPostBack)
{
if (Request.Form["Button1"] == null)//用来指示button1引发的回传是否创建该按钮
{
if ((bool)ViewState["Button_2_Exist"])
{
Panel1.Controls.Add(Build_Button());
}
}
}
} protected void Button1_Click(object sender, EventArgs e)
{
if (!(bool)ViewState["Button_2_Exist"])
{
Panel1.Controls.Add(Build_Button());
ViewState["Button_2_Exist"] = true;
}
else
{
ViewState["Button_2_Exist"] = false;
}
}protected Button Build_Button()
{
Button L_Button = new Button();
L_Button.ID = "Button_2";
L_Button.Text = "输出";
L_Button.Attributes.Add("runat", "server");
L_Button.BackColor = System.Drawing.Color.Blue;
L_Button.ForeColor = System.Drawing.Color.Wheat;
//Response.Write("<SCRIPT> function DDD() {alert('XXXX');} </SCRIPT>");
//L_Button.Attributes.Add("OnClick", "DDD()");
L_Button.Click += new EventHandler(L_Button_Click);
return (L_Button);
} protected void L_Button_Click(object sender, EventArgs e)
{
Response.Write("XXX");
}