这是一个类似的问题,但我在实施那里显示的解决方案时遇到了麻烦。
就我而言,我有两个链接,User Settings,Space Settings和两个UserControls,即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");
}*/
}
这是行不通的。结果是:
- 第一次访问时,Session["Settings"] 为空,并且UserControl
UserSettings.ascx
已加载(右),并且来自Page_Load
方法的日志UserSettings.ascx.cs
已显示在输出窗口(右)中。 - 单击空间设置链接后,用户控件
SpaceSettings.ascx
已加载(右),但在输出窗口中,它正在打印用户(错误)Page_Load
以及两者方法中的日志UserSettings.ascx.cs
并SpaceSettings.ascx.cs
已显示(UserSettings.ascx.cs
的日志错误)。 - 单击用户设置链接后,用户控件
UserSettings.ascx
已加载(右),但在输出窗口中,它正在打印空间(错误)Page_Load
以及两者方法中的日志UserSettings.ascx.cs
并SpaceSettings.ascx.cs
已显示(SpaceSettings.ascx.cs
的日志错误)。 - 我已经为每个UserControls添加了两个Button,例如,当单击 Button 时,它不会第一次在支持类中触发事件,但如果第二次单击它就会触发。第一次是记录用户(错误),第二次是空间(正确),然后事件将被触发。
SpaceSettings.ascx
- 当我第二次访问该页面时,我看到了最后加载的控件。既然
Session["Settings"]
不为空那么。我试图Page_Unload
在方法中和OnUnload
方法中将此值设置为空,但它们都不起作用。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
我该如何解决这个问题?
谢谢。