【发布时间】:2015-07-26 08:07:42
【问题描述】:
ASP.NET 会话结束和重新启动是否会干扰(阻止)在下拉列表上触发 SelectedIndexChanged 事件?
表单正在回发,但我的断点没有被命中?
在会话重新启动之前一切正常。
这是控件的asp:
<asp:DropDownList ID="dlSort" runat="server" AutoPostBack="true"
onselectedindexchanged="dlSort_SelectedIndexChanged">
</asp:DropDownList>
这是部分代码:
protected void dlSort_SelectedIndexChanged(object sender, EventArgs e)
{
PopulateItems();
//Breakpoint above- not hit after session restarts, but hit prior to session end.
}
我留下了一个空表单,因为它没有被重新填充...
提前致谢,
M
编辑 1:
这是填充控件的代码:
protected void Page_Load(object sender, EventArgs e)
{
Form.Action = Request.RawUrl;//Required as page is rewritten
if (!IsPostBack)
{
SetNoItemsMessage("");
PopulateSortDropDown();
PopulateItems();
}
}
private void PopulateSortDropDown()
{
clsProducts ops = new clsProducts();
DataTable dt = ops.GetProductSortDropDownData();
dlSortBy.DataSource = dt;
dlSortBy.DataBind();
dlSortBy.ClearSelection();
dlSortBy.SelectedValue = "1";
}
编辑 2:
为了澄清,PopulateItems() 方法填充了一个数据中继器,并且应该在排序下拉列表的索引更改时运行 (dlSort_SelectedIndexChanged) - 尽管正在发生回发,但这并没有发生。
Page_Load 执行填充 dlSort 的方法,该方法始终在运行。
我已经广泛检查了该页面,除了索引更改事件之外的所有内容都会触发。
编辑 3:
void Session_Start(object sender, EventArgs e)
{
InitialiseCommonSessionVariables();//This piece of code sets default values for session variables that are used in every case.
}
【问题讨论】:
-
PopulteItems() 方法中是否使用了任何会话变量?
-
谢谢,是的,使用了会话变量,但会话是通过一个对象访问的,该对象在访问单个变量之前检查初始化会话。主要问题是 dlSort_SelectedIndexChanged 在会话丢失并重新建立后根本没有触发。
-
发布初始填充 DDL 的代码。可能相关的事情:它在页面生命周期的哪个位置填充(例如 Page_Load)?是否仅在 IsPostBack 为假时才填充?是否启用了 ViewState?您的症状表明回发中未填充 DDL。
-
@Joe 查看编辑 - Page_Load,IsPostBack 为 false,ViewState 已启用。
-
@Mack -
PopulateSortDropDown中的“panelsort.Visible = true”看起来很可疑。这意味着它在 Postback 上可能是错误的,在这种情况下,面板中包含的 DDL 可能不会从 ViewState 重新填充。拼写错误的“dlSoryBy.DataBind”也只是一个错字吗?
标签: c# asp.net session webforms