我的自定义控件加载向导的回发问题

时间:2009-06-11 07:58:59

标签: asp.net postback wizard dynamic-controls

我在init中加载控件时遇到了一些问题,但它仍无法帮助我按时触发正确的回发事件。

我正在尝试创建一个丰富的向导控件,它将启用切换,带描述的链接,完全自定义的步骤,子步骤的集成 - 通过使用动态控制加载,避免了标准的asp.net向导加载方式。

想法是左侧部分导航,右侧部分内容或从右侧部分运行并遍及整个区域的子步骤。

Download source project

2 个答案:

答案 0 :(得分:0)

好的,我重新阅读了这个问题,这就是你必须要做的。你必须在每个回发上重新加载这些控件,给它们总是相同的“Id”。这可以在Page_Init或Page_Load事件中完成。当然,您必须在每个帖子上重新附加事件处理程序。

答案 1 :(得分:0)

非常感谢..我找到了答案 - 在负载控制方法中id是问题。我正在做这个向导..现在大多数事情都有效。 如果有人有兴趣看看它是如何工作的......有一些更新:

public void LoadSplitViewControl(string path)
{
    SwitchNavigationView(NavigationView.SplitView);
    LastNavigationView = NavigationView.SplitView;
    LoadControl(SplitControlLoader, path, "LoadedControlSplit");
}

public void LoadSingleViewControl(string path)
{
    SwitchNavigationView(NavigationView.SingleView);
    LastNavigationView = NavigationView.SingleView;
    LoadControl(SingleControlLoader, path, "LoadedControlSingle");
}

public void LoadSingleViewControlAsClear(string path)
{
    SwitchNavigationView(NavigationView.SingleView);
    LastNavigationView = NavigationView.SingleView;
    LoadControlAsClear(SingleControlLoader, path, "LoadedControlSingle");
}

private void LoadControl(PlaceHolder holder, string path, string ID)
{
    UserControl ctrl = (UserControl)Page.LoadControl(path);
    ctrl.ID = ID;
    LastControlPath = path;
    holder.Controls.Clear();
    holder.Controls.Add(ctrl);
}

//因为我正在使用stepview加载控件使用splitview和子步骤控件使用单一视图有时viewstate将无效,因此错误将被抛出但你可以通过使用LoadSingleViewControlAsClear来解决这个问题,它将在方法下加载。

private void LoadControlAsClear(PlaceHolder holder, string path, string ID)
{
    UserControl ctrl = (UserControl)Page.LoadControl(path);
    ctrl.ID = ID;
    LastControlPath = path;
    ctrl.EnableViewState = false;
    holder.Controls.Add(ctrl);
}

/ 我用于这样一个向导的另一个很酷的想法是我不使用viewstate而是使用session对象来保存通过步骤收集的值。我的会话对象密钥是由经过身份验证的用户名和pageguid生成的 - 因此您可以拥有许多已加载的页面,并且每个页面都将处理不同的会话对象。 /

public Guid PageGuid
{
    get
    {
        if (PageGuidField.Value == "")
        {
            var _pageGuid = Guid.NewGuid();
            PageGuidField.Value = _pageGuid.ToString();
            return _pageGuid;
        }
        return new Guid(PageGuidField.Value);
    }
}