0

这是一个类似的问题,但我在实施那里显示的解决方案时遇到了麻烦。

就我而言,我有两个链接,User SettingsSpace 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.csSpaceSettings.ascx.cs已显示(UserSettings.ascx.cs的日志错误)。
  • 单击用户设置链接后,用户控件 UserSettings.ascx已加载(右),但在输出窗口中,它正在打印空间(错误)Page_Load以及两者方法中的日志UserSettings.ascx.csSpaceSettings.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 

我该如何解决这个问题?

谢谢。

4

1 回答 1

0

我尝试了一种不同的方法来解决我的要求,并且解决了UserControl的交换,但后来我遇到了UserControls按钮的EventHandlers不是第一次被触发,但是如果它被点击两次就会被触发。

我在 ASP.NET 论坛上问过这个问题。但是没有人回答我的问题。但我一直在努力寻找解决方案,最后我做到了。问题出在身份证上。我已经在那个论坛上发布了解决方案。

这是链接。这可能对未来的用户有用。

于 2012-04-15T14:47:58.273 回答