C# 具有多个用户控件的sharepoint Web部件

C# 具有多个用户控件的sharepoint Web部件,c#,sharepoint,user-controls,web-parts,C#,Sharepoint,User Controls,Web Parts,我已在VisualStudio2010中使用三个用户控件(.ascx)创建了sharepoint 2010可视Web部件。我想通过单击当前加载的usercontrol上的某个按钮来动态更改Web部件中的usercontrol。主要问题在于,buttonClick事件仅在执行CreateChildControls方法(我尝试使用ViewData获取所需的usercontrol)后处理。有人能帮我解决这个问题吗?一种方法是让按钮调用javascript函数,该函数反过来调用以下内容: __doPos

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

一种方法是让按钮调用javascript函数,该函数反过来调用以下内容:

__doPostBack('LoadControl', 'ControlName');

然后,您可以使用服务器变量_EVENTTARGET和_EVENTARGUMENT来确定要在CreateChildControls事件处理程序中加载哪个控件。

Lee的响应基本正确,可能适合您。但是,您不应该仅仅使用
\uuu doPostBack
,而应该相信它会一直“神奇地”为您服务。Lee提到的此方法和变量是ASP.NET的内部变量,不打算直接使用。此外,如果您没有在页面上放置任何回发控件,实际上将不会生成此方法,并且调用它的代码将失败

幸运的是,导致和处理一般回发的代码非常简单。您不需要使用输入控件的内置事件处理程序(需要在触发之前构造它-因此在调用处理程序之前调用),而是将回发定位到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.
           ...
        }
    }
}
将为您生成必要的JavaScript表达式。(实际上,只要调用它,页面上就会“神奇地”出现
\uuu doPostBack
)。将在和之间调用。确保在此之前不要创建子控件(例如,通过调用或任何其他方式)。如果需要多个回发控件,
eventArguments
参数将允许您在它们之间进行区分

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


---费达我也有这个问题

将其添加到事件处理程序(在处理程序中执行代码后)

问候,

佩德罗

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