0
这是一个similar question,但我在实现该解决方案时遇到了麻烦。动态交换用户控件
在我来说,我有两个环节,用户设置,空间设置和两个用户控件,即,UserSettings.ascx
,SpaceSettings.ascx
。
- 用户第一次访问该页面时,他会看到用户设置。
- 根据点击这两个链接中的哪一个,PlaceHolder将交换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
已经被加载(右)和日志从UserSettings.ascx.cs
Page_Load
方法已显示在输出窗口(右)。 - 当空间设置链接已被点击时,用户控件
SpaceSettings.ascx
已经被加载(右),但在输出窗口正在打印用户(错)也从两个UserSettings.ascx.cs
和SpaceSettings.ascx.cs
的Page_Load
方法日志已被显示(UserSettings.ascx.cs
的日志是错误的)。 - 当用户设置链接已被点击时,用户控件
UserSettings.ascx
已经被加载(右),但在输出窗口正在打印空间(错)也从两个UserSettings.ascx.cs
和SpaceSettings.ascx.cs
的Page_Load
方法日志已被显示(SpaceSettings.ascx.cs
的日志是错误的)。 - 我已经添加了两个按钮到,如果被点击时候,说的
SpaceSettings.ascx
按钮被点击的时候,在不触发在支持类第一次的事件,但它确实它的用户控件中的每一个第二次。第一次登录用户(错误)和第二次空间(右)然后事件将被解雇。 - 当我第二次访问页面时,我看到最后加载的控件。由于
Session["Settings"]
不为空然后。我试图在Page_Unload
和OnUnload
方法中将此值设置为null,但它们都不起作用。Page_Unload
正在打破系统,因为它每次都被调用,而PostBack
和OnUnload
没有被调用。
我曾尝试使用Request["Settings"]
代替Session["Settings"]
,但Request["Settings"] = "User"
和Request["Settings"] = "Space"
是给我编译时错误:
Property or indexer 'System.Web.HttpRequest.this[string]' cannot be assigned to
我该如何解决这个问题?
谢谢。
您可能会等待其他人评论如何解决问题,但是是不是应该为这种客户端选项卡切换到jQuery? http://docs.jquery.com/UI/Tabs – 2012-04-15 11:54:30
@Lex李为什么我应该在这种情况下使用jQuery选项卡?我想我必须加载页面加载的所有内容,这将是非常糟糕的。 – 2012-04-15 14:49:21
jQuery选项卡也支持AJAX。 – 2012-04-16 01:33:50