2009-11-20 72 views
0

我正在写一个SharePoint Web部件,它将具有一个简单的ASP.NET窗体。我使用HtmlTextWriter来呈现控件。我遇到的问题是我的按钮似乎没有触发我分配给它的EventHandler。asp:button以编程方式创建: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!”改变“好!”相反,它什么都不做。我对所有这些技术都很陌生 - C#,Sharepoint和ASP.NET - 所以我很确定这是我的理解中的问题,但尝试不同的步骤从所有的网络和以前的问题的文章在这里避风港不解决我的问题。谢谢参观。

编辑:我与Web部件打开的SharePoint页面上,按钮已创建像这样:

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

它看起来像的OnClick价值尚未在所有被添加,这是我认为添加EventHandler会做。我是否试图以完全错误的方式添加OnClick?我也不明白为什么按钮名称与我在代码中声明的不匹配。

回答

3

看看这个链接:

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

你重写RenderContents方法不正确,和接线错了地方的单击事件。

+0

我发现这绝对是我的问题的一部分。我现在将CreateChildControls方法中的click事件连接起来,并且通过在RenderContents方法中调用RenderControls(HtmlTextWriter)来渲染教程中描述的控件。然而,我仍然没有喜悦,这导致我相信我的submitButton_Click方法中的逻辑是问题。我是否试图错误地更改按钮的文本属性? – 2009-11-20 20:12:44

+0

是submitButton类的属性吗?在submitButton.Text =“好!”后尝试添加this.SaveProperties = True; – Bravax 2009-11-20 20:44:49

+0

你在哪里部署Web部件DLL?如果它位于Web应用程序的/ bin目录中,则在更改生效之前,您将需要回收应用程序池。 – 2009-11-21 01:00:43

0

改为使用CreateChildControls覆盖,这会在ASP.NET控件渲染管道中正确调用。

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”外method.When写的SharePoint的WebParts,我一直采取这种做法

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

希望它有帮助。

+0

我一直从System.Web.UI.WebControls.WebParts.WebPart继承,但我现在继承自SharePoint命名空间,因为我从System WebPart命名空间继承时无法访问SaveControls。 – 2009-11-24 12:59:36

0

我有类似的问题。事件处理程序一直在触发。我检查了SharePoint页面的查看源,发现呈现的HTML控件是input type = submit。为了解决这个问题,我在代码中设置了'button.UseSubmitBehavior = false'并设置了ID。默认情况下,ASP.NET 2.0中的UseSubmitBehavior为true,如果未在代码中设置。