【问题标题】:Postback problem for my custom control load wizard我的自定义控件加载向导的回发问题
【发布时间】:2009-06-11 07:58:59
【问题描述】:

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

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

想法是在左侧部分导航、右侧部分内容或从右侧部分运行并覆盖整个区域的子步骤。

Download source project

【问题讨论】:

  • 不看代码,是不是动态加载这些控件?

标签: asp.net postback wizard dynamic-controls


【解决方案1】:

好的,我重新阅读了这个问题,这是你必须做的。您必须在每次回发时重新加载这些控件,并始终为它们提供相同的“Id”。这可以在 Page_Init 或 Page_Load 事件中完成。当然,您必须在每个回帖中重新附加事件处理程序。

【讨论】:

    【解决方案2】:

    非常感谢.. 我找到了答案 - 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);
    }
    

    //因为我正在使用使用 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);
    }
    

    /我用于此类向导的另一个很酷的想法是,我不使用视图状态,而是使用会话对象来保存通过步骤收集的值。我的会话对象密钥是由经过身份验证的用户名和 pageguid 生成的 - 所以你可以有许多加载的页面,每个页面都将处理不同的会话对象。/

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

    【讨论】:

      猜你喜欢
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多