これは同様の質問ですが、そこに示されている解決策を実装するのに問題があります。
私の場合、User Settings、Space Settings、および 2 つのUserControls、つまり 、UserSettings.ascx
の2 つのリンクがありますSpaceSettings.ascx
。
- ユーザーが初めてページにアクセスすると、ユーザー設定が表示されます。
- これら 2 つのリンクのどちらがクリックされたかに応じて、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"] は null で、UserControl
UserSettings.ascx
がロードされ (右)、Page_Load
メソッドからのログUserSettings.ascx.cs
が出力ウィンドウに表示されます (右)。 - [スペース設定]リンクをクリックすると、UserControl
SpaceSettings.ascx
が読み込まれます (右) が、[出力] ウィンドウでは、両方のメソッドからのログも出力されて表示されます(のログが間違っています)。Page_Load
UserSettings.ascx.cs
SpaceSettings.ascx.cs
UserSettings.ascx.cs
- User Settingsリンクをクリックすると、UserControlが
UserSettings.ascx
読み込まれます (右) が、出力ウィンドウに両方のメソッドからのログもスペース(間違って表示) されて表示されます (のログが間違っています)。Page_Load
UserSettings.ascx.cs
SpaceSettings.ascx.cs
SpaceSettings.ascx.cs
- UserControlsのそれぞれに 2 つのボタンを追加しました。たとえば、ボタンがクリックされたときに、最初はバッキング クラスでイベントが発生しませんが、2 回目にクリックされた場合は発生します。1 回目はユーザーのログ記録(間違っている) で、2 回目はスペース(右側) で、イベントが発生します。
SpaceSettings.ascx
- 2 回目にページにアクセスすると、最後に読み込まれたコントロールが表示されます。
Session["Settings"]
はnullではないので。Page_Unload
メソッド内とメソッド内でこの値を null に設定しようとしまし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
どうすればこれを解決できますか?
ありがとう。