C# asp:以编程方式创建的按钮:EventHandler不会激发

C# asp:以编程方式创建的按钮:EventHandler不会激发,c#,asp.net,sharepoint,web-controls,htmltextwriter,C#,Asp.net,Sharepoint,Web Controls,Htmltextwriter,我正在编写一个SharePoint web部件,它将具有一个简单的ASP.NET表单。我正在使用HtmlTextWriter渲染控件。我的问题是,我的按钮似乎没有触发我分配给它的EventHandler 我最初在CreateChildControls方法中声明了按钮,并连接了事件处理程序: { Button submitButton; submitButton = new Button(); submitButton.Text = "Go!"; submitBut

我正在编写一个SharePoint web部件,它将具有一个简单的ASP.NET表单。我正在使用HtmlTextWriter渲染控件。我的问题是,我的按钮似乎没有触发我分配给它的EventHandler

我最初在CreateChildControls方法中声明了按钮,并连接了事件处理程序:

{
    Button submitButton;
    submitButton = new Button();
    submitButton.Text = "Go!";
    submitButton.Click += new EventHandler(submitButton_Click);
    Controls.Add(submitButton);
}
我已经声明了“submitButton_Click”事件处理程序的功能:

void submitButton_Click(object sender, EventArgs e)
{
    submitButton.Text = "Good!";
}
我渲染控件:

protected override void RenderContents(System.Web.UI.HtmlTextWriter output)
{ 
        RenderChildren(output);
}
最后,我部署web部件。它在目录中显示良好,当我将其添加到页面时,该控件显示出来。然而,我假设当我点击按钮时,它的文本应该从“Go!”变为“Good!”,而不是什么都不做。我对所有这些技术——C#、Sharepoint和ASP.NET——都很陌生,所以我很确定这是我理解上的一个问题,但尝试不同于网络上所有文章和之前问题的步骤并没有解决我的问题。谢谢你看

编辑:我打开了包含web部件的SharePoint页面,按钮的创建方式如下:

<input type="submit" name="ctl00$PlaceHolderMain$ctl00$ctl04" value="Go!" />

看起来似乎根本没有添加OnClick值,我认为添加EventHandler可以做到这一点。我是否试图以完全错误的方式添加OnClick?我也不明白为什么按钮名称与我在代码中声明的不匹配。

查看此链接:

您错误地覆盖了RenderContents方法,并在错误的位置连接了click事件。

查看此链接:


您错误地重写了RenderContent方法,并在错误的位置连接了click事件。

请改用CreateChildControls重写,这会在ASP.NET控件渲染管道中的正确时刻调用。

改用CreateChildControls重写,这在ASP.NET控件呈现管道中的正确时刻被调用。

您是从System.Web.UI.WebControl.WebParts.WebParts继承还是从SharePoint Web Part继承(对不起,我不记得名称空间)。建议从“System.Web.UI.WebControls.WebParts.WebPart”继承,这样它就是一个简单的ASP.NET Web部件,也可以在SharePoint中使用

一旦您从该类继承,您将需要重写“Render”方法,这是我经常做的事情,并且效果很好。我认为你的CreatechildControls方法是正确的。因此,渲染方法如下所示

protected override void Render(System.Web.UI.HtmlTextWriter output)
{ 
        submitButton.RenderControl(write);
}
您还需要在“CreateChildControls”方法之外声明您的按钮

  • 从System.Web.UI.WebControl.WebParts.WebPart继承
  • 创建一个分部类,用于声明Web部件使用的所有控件,并重写以下方法:“CreateChildControls”、“OnInit”和“Render”

  • 希望有帮助。

    您是从System.Web.UI.WebControl.WebParts.WebParts继承的还是从SharePoint Web Part继承的(对不起,我不记得名称空间)。建议从“System.Web.UI.WebControls.WebParts.WebPart”继承,这样它就是一个简单的ASP.NET Web部件,也可以在SharePoint中使用

    一旦您从该类继承,您将需要重写“Render”方法,这是我经常做的事情,并且效果很好。我认为你的CreatechildControls方法是正确的。因此,渲染方法如下所示

    protected override void Render(System.Web.UI.HtmlTextWriter output)
    { 
            submitButton.RenderControl(write);
    }
    
    您还需要在“CreateChildControls”方法之外声明您的按钮

  • 从System.Web.UI.WebControl.WebParts.WebPart继承
  • 创建一个分部类,用于声明Web部件使用的所有控件,并重写以下方法:“CreateChildControls”、“OnInit”和“Render”

  • 希望有帮助。

    我也有类似的问题。事件处理程序始终处于启动状态。我检查了SharePoint页面的视图源,发现呈现的HTML控件是输入类型=提交。为了解决这个问题,我在代码中设置了“button.UseSubmitBehavior=false”,并设置了ID。如果没有在代码中设置,ASP.NET 2.0中的UseSubmitBehavior默认为true

    我也有类似的问题。事件处理程序始终处于启动状态。我检查了SharePoint页面的视图源,发现呈现的HTML控件是输入类型=提交。为了解决这个问题,我在代码中设置了“button.UseSubmitBehavior=false”,并设置了ID。如果没有在代码中设置,ASP.NET 2.0中的UseSubmitBehavior默认为true

    我明白这肯定是我的问题的一部分。现在,我正在CreateChildControls方法中连接click事件,并通过在RenderContents方法中调用RenderControls(HtmlTextWriter)来呈现教程中描述的控件。然而,我仍然没有得到任何乐趣,这让我相信我的submitButton_Click方法中的逻辑就是问题所在。我是否试图错误地更改按钮的文本属性?submitButton是您的类的属性吗?尝试在submitButton之后添加this.SaveProperties=True.Text=“好!”;将web部件DLL部署到何处?如果它位于web应用程序的/bin目录中,则需要在更改生效之前回收应用程序池。我尝试使用SaveProperties方法,但仍然一无所获。目前,我正在将我的web部件部署到web应用的本地bin。每次部署时我都会回收应用程序池(实际上,我会完全回收IIS)。接下来您可能需要调试它。在CreateChildControls方法中放置一个断点,查看EventArgs值并查看其设置。我发现这肯定是我的问题的一部分。现在,我正在CreateChildControls方法中连接click事件,并通过在RenderContents方法中调用RenderControls(HtmlTextWriter)来呈现教程中描述的控件。然而,我仍然没有得到快乐,这让我相信