Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 自定义控件加载向导的回发问题_Asp.net_Postback_Wizard_Dynamic Controls - Fatal编程技术网

Asp.net 自定义控件加载向导的回发问题

Asp.net 自定义控件加载向导的回发问题,asp.net,postback,wizard,dynamic-controls,Asp.net,Postback,Wizard,Dynamic Controls,我在init中加载控件时遇到了一些问题,它仍然不能帮助我及时启动正确的回发事件 我正在尝试创建一个丰富的向导控件,通过使用动态控件加载来实现切换、带说明的链接、完全自定义的步骤、子步骤的集成,这是一种避免标准asp.net向导加载方式的方法 其想法是在左侧部分导航,在右侧部分内容,或从右侧部分运行的子步骤,并覆盖整个区域 好的,我重读了这个问题,下面是你要做的。您必须在每次回发时重新加载这些控件,并始终为它们提供相同的“Id”。这可以在Page_Init或Page_Load事件中完成。当然,您必

我在init中加载控件时遇到了一些问题,它仍然不能帮助我及时启动正确的回发事件

我正在尝试创建一个丰富的向导控件,通过使用动态控件加载来实现切换、带说明的链接、完全自定义的步骤、子步骤的集成,这是一种避免标准asp.net向导加载方式的方法

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


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

非常感谢。。我找到了答案——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加载的步骤控件和使用single view加载的子步骤控件,有时viewstate将无效,因此会引发错误,但您可以通过使用LoadSingleViewControlsClear解决此问题,LoadSingleViewControlsClear将在下面的方法中加载

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);
    }
}