C# 以编程方式在SharePoint中创建asp:按钮和附加事件

C# 以编程方式在SharePoint中创建asp:按钮和附加事件,c#,asp.net,sharepoint,C#,Asp.net,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

我试图在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中创建和附加按钮?

您应该在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");
}

您应该在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");
}

好的,下面是我如何解决它的,感谢所有的回复,我正在寻找一种方法,将事件附加到一个按钮上,该按钮是在初始化后的运行时动态创建的。希望它对其他人也有用

<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;
}

好的,下面是我如何解决它的,感谢所有的回复,我正在寻找一种方法,将事件附加到一个按钮上,该按钮是在初始化后的运行时动态创建的。希望它对其他人也有用

<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;
}

您正在创建动态控件。您的代码应该在每个PageLoad事件中执行。 我的建议是删除创建按钮的代码部分的IsPostBack


如果不这样做,您将创建控件,但每次发生PageLoad事件时,您的控件将被删除,应用程序将不会跟踪您的事件。换句话说,您应该始终重新创建控件。

您正在创建动态控件。您的代码应该在每个PageLoad事件中执行。 我的建议是删除创建按钮的代码部分的IsPostBack


如果不这样做,您将创建控件,但每次发生PageLoad事件时,您的控件将被删除,应用程序将不会跟踪您的事件。换句话说,您应该始终重新创建控件。

是否可以在另一个事件中调用OnPreInit?您不调用OnPreInit-web部件基础结构代表您调用它。您只需重写OnPreInit,而不是调用它。@Kubi我认为您不能,请尝试下面的@Kubi解决方案在另一个事件中调用OnPreInit是否可能?您不调用OnPreInit-web部件基础结构代表您调用它。您只需重写OnPreInit,而不是调用它。@Kubi我认为您不能,请尝试下面的@KubiFix格式解决方案,并在完整的代码段中输入您要在其中添加控件的方法或事件,例如-这几乎肯定是问题所在,您忽略了它,这可能会给您带来更多帮助。嗨,Ryan,我这里的问题基本上是我不能在运行时将事件附加到控件,它必须是在页面初始化期间,我可以重写并运行相同的代码而不会出现任何错误,但我的问题是它是否在运行时也可用..修复格式并放入完整的代码段您在添加控件时使用的方法或事件,例如,这几乎肯定是问题所在,您已经忽略了它,这可能会给您带来更多帮助。嗨,Ryan,我这里的问题基本上是,我不能在运行时将事件附加到控件,必须在页面初始化期间,我可以重写并运行相同的代码而不会出现任何错误,但我的问题是它是否在运行时也可用。不要忘记通过按勾选键来接受您自己的正确答案不要忘记通过按勾选键来接受您自己的正确答案