[英]Programmatically create asp:Button and attach event in SharePoint
我正在嘗試以編程方式在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中創建和附加按鈕的方法嗎?
好的,我是如何解決它的,感謝所有的回復,我正在尋找一種方法將事件附加到在運行時(初始化之后)動態創建的按鈕。 希望它也適用於其他人。
<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;
}
你應該在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");
}
您正在創建動態控件。 您的代碼應該在每個PageLoad
事件中執行。 刪除IsPostBack
是您創建按鈕的代碼部分是我的建議。
如果不這樣做,您將創建控件,但每次發生PageLoad
事件時,您的控件都將被刪除,應用程序將不會跟蹤您的事件。 換句話說,您應該始終重新創建控件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.