0

これは同様の質問ですが、そこに示されている解決策を実装するのに問題があります。

私の場合、User SettingsSpace 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_LoadUserSettings.ascx.csSpaceSettings.ascx.csUserSettings.ascx.cs
  • User Settingsリンクをクリックすると、UserControl UserSettings.ascx読み込まれます (右) が、出力ウィンドウに両方のメソッドからのログもスペース(間違って表示) されて表示されます (のログが間違っています)。Page_LoadUserSettings.ascx.csSpaceSettings.ascx.csSpaceSettings.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 

どうすればこれを解決できますか?

ありがとう。

4

1 に答える 1

0

私は自分の要件を解決するために別のアプローチを試みましたが、それはUserControlのスワッピングを解決しましたが、UserControlsボタンのEventHandlersが最初に起動されていませんでしたが、2 回クリックされた場合に起動していました。

ASP.NET フォーラムでこの質問をしました。しかし、誰も私の質問に答えませんでした。しかし、私は解決策を見つけるために懸命に努力し、ついにそれを可能にしました。問題は ID にありました。そのフォーラムに解決策を投稿しました。

ここにリンクがあります。これは、将来のユーザーにとって役立つ可能性があります。

于 2012-04-15T14:47:58.273 に答える