动态交换UserControl

时间:2012-04-15 11:37:25

标签: asp.net user-controls

这是similar question,但我在实施此处显示的解决方案时遇到了麻烦。

在我的情况下,我有两个链接,用户设置空间设置和两个 UserControls ,即UserSettings.ascx,{ {1}}。

  • 当用户第一次访问该页面时,他会看到用户设置
  • 根据点击这两个链接中的哪一个, PlaceHolder 将交换 UserControl

我所做的工作如下所示:

SpaceSettings.ascx

这不起作用。结果是:

  • 第一次访问会话["设置"]为空, UserControl public partial class SiteSettings : RefreshDitectedPage { protected void Page_Load(object sender, EventArgs e) { } protected override void OnInit(EventArgs e) { base.OnInit(e); string key = Session["Settings"] as String; System.Diagnostics.Debug.WriteLine(key); if (key == null) { Session["Settings"] = "User"; AddUserSettings(); } else { if (key.Equals("User")) { AddUserSettings(); } else { AddSpaceSettings(); } } } protected void SettingsLink_OnCommand(object sender, CommandEventArgs commandEventArgs) { switch (commandEventArgs.CommandName) { case "User": Session["Settings"] = "User"; AddUserSettings(); break; case "Space": Session["Settings"] = "Space"; AddSpaceSettings(); break; } } private void AddUserSettings() { AddSettings(LoadControl("~/UserControls/UserSettings.ascx") as UserSettings); } private void AddSpaceSettings() { AddSettings(LoadControl("~/UserControls/SpaceSettings.ascx") as SpaceSettings); } private void AddSettings(UserControl control) { SettingsPlaceholder.Controls.Clear(); SettingsPlaceholder.Controls.Add(control); } /*protected void Page_Unload(object sender, EventArgs e) { Session["Settings"] = null; System.Diagnostics.Debug.WriteLine("Unload called"); }*/ } 已加载(右)并从UserSettings.ascx登录Page_Load的方法已显示在输出窗口(右)。
  • 点击空间设置链接后, UserControl UserSettings.ascx.cs已加载(右)但在输出窗口中正在打印用户(错误)还显示了SpaceSettings.ascxPage_Load的{​​{1}}方法的日志(UserSettings.ascx.cs&#39} s日志错误)。
  • 点击用户设置链接后, UserControl SpaceSettings.ascx.cs已加载(右)但在输出窗口中正在打印 Space (错误)还显示了UserSettings.ascx.csUserSettings.ascx的{​​{1}}方法的日志(Page_Load&#39} s日志错误)。
  • 我已经为 UserControls 中的每一个添加了两个按钮,例如,当点击了UserSettings.ascx.cs的按钮时,它没有触发事件在第一次支持类时,但如果第二次单击它则会这样做。第一次记录用户(错误)和第二次空间(右),然后事件将被解雇。
  • 当我第二次访问该页面时,我正在看到最后加载的控件。由于SpaceSettings.ascx.cs不是null。我试图在SpaceSettings.ascx.csSpaceSettings.ascx方法中将此值设置为null,但它们都不起作用。 Session["Settings"]正在打破系统,因为每次调用Page_UnloadOnUnload时都会调用它。

我尝试使用Page_Unload代替PostBack,但OnUnloadRequest["Settings"]给出了编译时错误:

Session["Settings"]

我该如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:0)

我尝试了一种不同的方法来解决我的需求,这解决了 UserControl 的交换,但后来我遇到了按钮的 EventHandlers UserControls 的强>,但如果点击两次则触发。

我在ASP.NET论坛中问过这个问题。但没有人回答我的问题。但是我努力寻找解决方案,而且我让它成为可能。问题出在身份证上。我在那个论坛上发布了解决方案。

这是link。这可能对将来的用户有用。