具有许多用户控件的共享点 webpart

Posted

技术标签:

【中文标题】具有许多用户控件的共享点 webpart【英文标题】:sharepoint webpart with many usercontrols 【发布时间】:2012-04-14 06:24:23 【问题描述】:

我在 VisualStudio2010 中使用三个用户控件 (.ascx) 创建了 sharepoint 2010 可视化 webpart。我想通过单击当前加载的用户控件上的某个按钮来动态更改 web 部件中的用户控件。主要问题在于 buttonClick 事件仅在执行 CreateChildControls 方法后才被处理(我尝试使用 ViewData 获取所需的用户控件)。谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:

一种方法是让按钮调用一个 javascript 函数,然后调用以下函数:

__doPostBack('LoadControl', 'ControlName');

然后您可以使用服务器变量 __EVENTTARGET 和 __EVENTARGUMENT 找出要在 CreateChildControls 事件处理程序中加载的控件。

【讨论】:

【参考方案2】:

Lee 的回答基本上是正确的,可能对你有用。但是,您不应该只使用__doPostBack 并相信它会永远“神奇地”为您服务。 Lee 提到的这个方法和变量是 ASP.NET 内部的,不能直接使用。此外,如果您没有在页面上放置任何回发控件,则该方法实际上不会生成,并且调用它的代码将失败。

幸运的是,导致和处理通用回发的代码非常简单。而不是使用输入控件的内置事件处理程序(需要在被触发之前构建 - 因此在调用处理程序之前调用CreateChildControls),您可以将回发定位到 Web 部件本身:

public class MyWebPart : WebPart, IPostBackEventHandler 
    protected override void CreateChildControls() 
        Control clickable = ...; // Create a clickable control.
        // Get JavaScript expression to send postback "test" to "this" web part.
        var postBack = Page.ClientScript.GetPostBackEventReference(this, "test");
        clickable.Attributes["onclick"] = postBack + "; return false";
        Controls.Add(clickable);
    

    void IPostBackEventHandler.RaisePostBackEvent(string eventArgument) 
        if (eventArgument == "test")  // Recognize and handle our postback.
           ...
        
    

GetPostBackEventReference 将为您生成必要的 JavaScript 表达式。 (实际上,调用它会使__doPostBack“神奇地”出现在页面上。)RaisePostBackEvent 将在OnLoadOnPreRender 之间调用。确保不要在此之前创建子控件(例如,通过调用EnsureChildControls,或通过任何其他方式)。如果您需要多个回发控件,eventArguments 参数将使您在它们之间有所不同。

您需要用户控件中的回发触发器,而不是直接在 Web 部件中。我在 Web 部件中显示它只是为了保持简单。您可以将GetPostBackEventReference 的结果放到任何控件中,只要您在调用它时使用正确的 Page 和 Web 部件实例。

--- 费达

【讨论】:

【参考方案3】:

我也有这个问题。

将此添加到事件处理程序(在处理程序内执行代码之后)

this.Page.Response.Redirect(HttpContext.Current.Request.Url.AbsoluteUri, true);

问候,

佩德罗

【讨论】:

以上是关于具有许多用户控件的共享点 webpart的主要内容,如果未能解决你的问题,请参考以下文章

在不包含 DIV 的用户控件中呈现 WebPart

WebPart 上的用户控件、PostBack / ViewState 问题

SharePoint 2010 用户控件保存属性

Sharepoint webparts - 在 .designer.cs 文件中作为基本 UserControl 生成的自定义用户控件

共享点自定义智能部件中的用户控件属性

sharepoint webpart 项目中的 web.config