我正在尝试在SharePoint实例的更新面板中以编程方式创建ASP.NET按钮,但由于页面生命周期,我无法在按钮上附加服务器端事件。
以下是代码:
TableCell tcellbutton = new TableCell();
b.Click += new EventHandler(b_Click);
b.CausesValidation = true;
tcellbutton.Controls.Add(b);
tr.Cells.Add(tcellbutton);
table.Rows.Add(tr);
panel1.Controls.Add(table);
void b_Click(object sender, EventArgs e)
{
string studentnumber = (sender as Button).ID.ToString().Substring(3, (sender as Button).ID.ToString().Length - 3);
TextBox t = panel1.FindControl("txt" + studentNumber) as TextBox;
}
是否有另一种在Sharepoint中创建和附加按钮的方法?
答案 0 :(得分:2)
好的,我是如何解决它的,感谢所有的回复,我正在寻找一种方法将事件附加到在运行时(初始化之后)动态创建的按钮。希望它也适用于其他人。
<script type="text/javascript">
function ButtonClick(buttonId) {
alert("Button " + buttonId + " clicked from javascript");
}
</script>
protected void Button_Click(object sender, EventArgs e)
{
ClientScript.RegisterClientScriptBlock(this.GetType(), ((Button)sender).ID, "<script>alert('Button_Click');</script>");
Response.Write(DateTime.Now.ToString() + ": " + ((Button)sender).ID + " was clicked");
}
private Button GetButton(string id, string name)
{
Button b = new Button();
b.Text = name;
b.ID = id;
b.Click += new EventHandler(Button_Click);
b.OnClientClick = "ButtonClick('" + b.ClientID + "')";
return b;
}
答案 1 :(得分:1)
您应该在PreInit
事件中添加代码,以下代码可以正常工作:
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
Button bb = new Button();
bb.Click += new EventHandler(bb_Click);
bb.CausesValidation = true;
bb.ID = "button1";
Panel1.Controls.Add(bb);
}
private void bb_Click(object sender, EventArgs e)
{
Response.Write("any thing here");
}
答案 2 :(得分:1)
您正在创建动态控件。您的代码应在每个PageLoad
事件中执行。
删除IsPostBack
代码中您创建按钮的部分是我的建议。
如果您不这样做,您将创建控件,但每次发生PageLoad
事件时,您的控件都将被删除,应用程序将不会关注您的事件。换句话说,你应该总是重新创建控件。