asp:按钮以编程方式创建:EventHandler不会触发

时间:2009-11-20 19:09:13

标签: c# asp.net sharepoint web-controls htmltextwriter

我正在编写一个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”EventHandler的功能:

void submitButton_Click(object sender, EventArgs e)
{
    submitButton.Text = "Good!";
}

我渲染控件:

protected override void RenderContents(System.Web.UI.HtmlTextWriter output)
{ 
        RenderChildren(output);
}

最后,我部署了Web部件。它在目录中显示正常,当我将其添加到页面时,控件显示出来。但是,我认为当我点击按钮时,它的文本应该从“Go!”改变。 “好!”相反,它什么都不做。我对所有这些技术都很陌生 - C#,Sharepoint和ASP.NET - 所以我很确定这是我理解的问题,但是尝试不同的步骤来自网络上的文章以及之前的问题我解决了我的问题。谢谢你看看。

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

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

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

4 个答案:

答案 0 :(得分:3)

请看这个链接:

http://msdn.microsoft.com/en-us/library/ms452873.aspx

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

答案 1 :(得分:1)

您是继承自System.Web.UI.WebControls.WebParts.WebPart还是SharePoint WebPart(抱歉,我不记得名称空间)。建议继承自“System.Web.UI.WebControls.WebParts.WebPart”,以便它是一个简单的ASP.NET Web部件,它也可以在SharePoint中使用。

一旦从该类继承,您将需要覆盖“Render”方法,这是我一直以来所做的并且工作得很好。我认为您的CreatechildControls方法是正确的。所以你的Render方法看起来像

protected override void Render(System.Web.UI.HtmlTextWriter output)
{ 
        submitButton.RenderControl(write);
}

您还需要在“CreateChildControls”方法之外声明您的按钮。编写SharePoint WebParts时,我总是采用这种方法

  1. 从System.Web.UI.WebControls.WebParts.WebPart
  2. 继承
  3. 创建一个部分类,用于声明WebPart使用的所有控件并覆盖以下方法:“CreateChildControls”,“OnInit”和“Render”。
  4. 希望它有所帮助。

答案 2 :(得分:0)

使用CreateChildControls覆盖,在ASP.NET控件渲染管道中适时调用它。

答案 3 :(得分:0)

我有类似的问题。事件处理程序总是在触发。我检查了SharePoint页面的查看源,发现呈现的HTML控件是输入类型=提交。要解决此问题,我在代码中设置'button.UseSubmitBehavior = false'并设置ID。默认情况下,ASP.NET 2.0中的UseSubmitBehavior为true,如果未在代码中设置。