【问题标题】:Masterpage Dropdown List not keeping Selected Index母版页下拉列表未保留选定索引
【发布时间】:2009-04-28 22:14:39
【问题描述】:

好的,我的母版页有一个下拉菜单,它控制影响很多事情的大小。我需要从内容页面访问下拉索引,所以我使用此代码进行操作。

public partial class MasterPage : System.Web.UI.MasterPage
{
public DropDownList MySize { get { return _ddlSize; } }
}

我正在使用 Ajax,并且当大小更改时,Masterpage 上的菜单也会更改。

但是当我点击更新的菜单时,它使用我的内容页面上下拉列表的零索引,即使它在视觉上显示我选择的大小。

  int size = Convert.ToInt32(Master.MySize.SelectedItem.Text); //Uses 0 index :(

我不想使用 Session,我只是不明白为什么它不能 100% 工作。有人有什么想法吗?

【问题讨论】:

  • 每次关闭 ajax 都有效吗?

标签: asp.net session drop-down-menu master-pages viewstate


【解决方案1】:

我想通了!

我将下拉菜单设置为公共静态对象

public static DropDownList MySize;

然后我将它设置为每次加载母版页时等于页面实例。

protected void Page_Load(object sender, EventArgs e)
{
    MySize = _ddlSize;
}

调用 DropDownList 有点不同,因为它是一个静态对象。

MasterPage.MySize.SelectedItem.Text

但它适用于从母版页派生的所有内容页面。

【讨论】:

  • 只有在您希望它为所有用户基本上永远存在的情况下,使其成为静态才有效。静态对象存在于您的应用程序正在运行的 iis 工作进程中,这意味着它在全局范围内可用,甚至可以跨用户会话使用,直到工作进程被杀死或重新启动(大多数情况下,应用程序重新启动将摆脱它,但并非总是如此)。
  • 我已经在多个用户上测试过这个方法,效果很好。它确实提出了一个很好的问题,即如何使全局静态变量存在于多个会话中,因为这不是这样做的方法。
【解决方案2】:

您是否在多用户场景中检查过此解决方案,因为该值是静态的,它将反映在不同的用户中

母版页中设置的视图状态应保留下拉列表值或尝试使用隐藏控件来保持值

【讨论】:

  • 你提出了一个很好的观点。我已关闭浏览器并重新打开它,但未保留值。我认为它有效,但现在我有点偏执。感谢您指出这一点。
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多