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