Asp.net 动态交换用户控件
这是一个很好的解决方案,但是我在实现上面显示的解决方案时遇到了麻烦 在我的例子中,我有两个链接,用户设置,空间设置和两个用户控件,即,Asp.net 动态交换用户控件,asp.net,user-controls,Asp.net,User Controls,这是一个很好的解决方案,但是我在实现上面显示的解决方案时遇到了麻烦 在我的例子中,我有两个链接,用户设置,空间设置和两个用户控件,即,UserSettings.ascx,SpaceSettings.ascx 当用户第一次访问页面时,他将看到用户设置 根据单击这两个链接中的哪一个,占位符将交换用户控件 我所做的工作如下所示: public partial class SiteSettings : RefreshDitectedPage { protected void Page
UserSettings.ascx
,SpaceSettings.ascx
- 当用户第一次访问页面时,他将看到用户设置
- 根据单击这两个链接中的哪一个,占位符将交换用户控件
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");
}*/
}
这是行不通的。结果是:
- 第一次访问时,会话[“设置”]为空,并且已加载用户控件
(右)并从用户设置.ascx
页面加载
用户设置方法记录。输出窗口(右)中显示了ascx.cs
- 单击空间设置链接后,已加载用户控件
SpaceSettings.ascx(右),但在输出窗口中它正在打印用户(错误)此外,还显示了
和UserSettings.ascx.cs
两种方法的SpaceSettings.ascx.cs
页面加载的日志(
的日志错误)UserSettings.ascx.cs
- 单击用户设置链接后,已加载用户控件
UserSettings.ascx(右),但在输出窗口中是打印空间(错误)此外,还显示了
和UserSettings.ascx.cs
方法的SpaceSettings.ascx.cs
页面加载的日志(
的日志错误)SpaceSettings.ascx.cs
- 我在每个用户控件中添加了两个按钮,当点击
按钮时,它不会第一次在后台类中触发事件,但如果是第二次点击,它会触发。第一次记录用户(错误)和第二次记录时间间隔(正确)时,事件将被触发SpaceSettings.ascx
- 当我第二次访问页面时,我看到的是上次加载的控件。由于
不为空。我已尝试在会话[“设置”]
和Page\u Unload
方法中将此值设置为null,但这两种方法都不起作用OnUnload
正在破坏系统,因为它每次都被调用,而Page\u 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
我怎样才能解决这个问题
谢谢。我尝试了一种不同的方法来解决我的需求,这解决了用户控件的交换问题,但后来我发现用户控件的按钮的事件处理程序不是第一次被触发的,而是在被点击两次时被触发的 我在ASP.NET论坛上问过这个问题。但是没有人回答我的问题。但我一直在努力寻找解决办法,最后我使之成为可能。问题出在ID上。我已经在那个论坛上发布了解决方案
这是你的电话号码。这对未来的用户可能很有用。您可能会等待其他人对如何解决该问题发表意见,但现在不是切换到jQuery以获得此类客户端选项卡的时候了吗@Lex Li在这种情况下为什么要使用jQuery选项卡?我想我必须在页面加载中加载所有内容,这将非常糟糕。jQuery选项卡也支持AJAX。