0

我正在编写一个具有简单 ASP.NET 表单的 SharePoint Web 部件。我正在使用 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 部件。它在目录中显示得很好,当我将它添加到页面时,控件就会显示出来。但是,我会假设当我单击按钮时,它的文本应该从“开始!” “好!” 相反,它什么也不做。我对所有这些技术(C#、Sharepoint 和 ASP.NET)都很陌生,所以我很确定这是我的理解方面的问题,但是尝试从网络上的文章和以前的问题中尝试不同的步骤没有没有解决我的问题。谢谢参观。

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

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

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

4

4 回答 4

3

看看这个链接:

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

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

于 2009-11-20T19:23:01.533 回答
1

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

从该类继承后,您将需要覆盖“渲染”方法,这是我一直在做的,并且效果很好。我认为您的 CreatechildControls 方法是正确的。所以你的渲染方法看起来像

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

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

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

希望能帮助到你。

于 2009-11-22T21:52:10.403 回答
0

请改用 CreateChildControls 覆盖,这会在 ASP.NET 控件呈现管道中的适当时刻被调用。

于 2009-11-21T05:06:32.670 回答
0

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

于 2010-01-11T21:05:53.393 回答