我的asp.net网页上有一个RadMultipage控件。

我正在将用户控件加载为该控件内的页面。

下面是加载用户控件的代码。

 protected void RadMultiPage1_PageViewCreated(object sender, Telerik.Web.UI.RadMultiPageEventArgs e)
    {
        try
        {
            string controlName;
            int index = e.PageView.ID.Trim().IndexOf(" ");
            if (index > 0)
            { controlName = e.PageView.ID.Trim().Remove(index); }
            else
            { controlName = e.PageView.ID; }

            Control pageViewContents = LoadControl(controlName + ".ascx");
            pageViewContents.ID = e.PageView.ID + "userControl";
            e.PageView.Controls.Add(pageViewContents);
        }
        catch (Exception ex)
        {
            Utility.WalkException(this, ex, "There was an error while performing this operation.");
        }
    }


我还启用了视图状态和autoeventwireup。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" EnableViewState="true" ViewStateMode="Enabled" Inherits="VentureAssessmentApp.Default" %>


现在我遇到的问题是用户控件上的按钮。该按钮的click事件不会被触发。它只是重新加载页面。甚至IsPostBack返回false。

有人可以提出一些解决方案吗?有时候,单击事件有效,但大多数情况下却无效。

最佳答案

这是一个典型的页面生命周期问题。我猜发生了什么事,就是当触发回发时,页面不知道哪个控件触发了回发,因为在进行评估时,尚未将Button(及其父UserControl)添加到页面的控件层次结构中...所以,我将矛头指向RadMultiPage1_PageViewCreated事件处理程序。在我看来,将服务器控件动态添加到页面很尴尬。

建议

将控件加载逻辑移出RadMultiPage1_PageViewCreated事件。将此逻辑放在Page的Init事件中,或者如果Load事件为时过早,将其放在页面的Init事件中。

您可以通过检查RadMultiPage属性或SelectedIndex属性来确定在SelectedPageView控件中选择了哪个页面。但是,如果将RadTabStrip控件与RadMultiPage控件结合使用,则可以检查RadTabStripSelectedTabSelectedIndex属性



protected override void OnLoad(EventArgs e)
{
    LoadStuff();
}

private void LoadStuff()
{
        try
        {
            string controlName;
            int index = YOUR_MULTI_PAGE_CONTROL.SelectedIndex;
            if (index > 0)
            { controlName = YOUR_MULTI_PAGE_CONTROL.PageViews[index].ID.Trim().Remove(index); }
            else
            { controlName = YOUR_MULTI_PAGE_CONTROL.PageViews[index].ID; }

            Control pageViewContents = LoadControl(controlName + ".ascx");
            pageViewContents.ID = YOUR_MULTI_PAGE_CONTROL.PageViews[index].ID + "userControl";
            YOUR_MULTI_PAGE_CONTROL.PageView.Controls.Add(pageViewContents);
        }
        catch (Exception ex)
        {
            Utility.WalkException(this, ex, "There was an error while performing this operation.");
        }
}

08-06 13:42