我无法保存应该在多个页面上工作的DropDownList的会话。这是我现在的代码:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ddlOffice.SelectedValue = Session("Office")
End Sub
这是我分配值的代码......
Protected Sub ddlOffice_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ddlOffice.SelectedIndexChanged
Session("Office") = ddlOffice.SelectedItem.Value.ToString
End Sub
我使用断点检查了最后一个值并且它肯定正确传递 - 为load参数传递的值是“2”,这是正确的,但SelectedIndexChanged会话值似乎默认返回1.始终。有什么指针吗?
答案 0 :(得分:1)
控制事件处理程序在<{strong> Page_Load
事件之后被触发。 ddlOffice_SelectedIndexChanged
事件处理程序也是如此。代码ddlOffice.SelectedValue = Session("Office")
已在Page_Load
阶段运行,然后会话具有旧值。要解决此问题,请按以下方式更改ddlOffice_SelectedIndexChanged
:
Protected Sub ddlOffice_SelectedIndexChanged(
ByVal sender As Object,
ByVal e As EventArgs) Handles ddlOffice.SelectedIndexChanged
Session("Office") = ddlOffice.SelectedItem.Value.ToString
ddlOffice.SelectedValue = ddlOffice.SelectedItem.Value.ToString
End Sub
并在Page_Load
事件中添加一个检查:
If Not Page.IsPostback
ddlOffice.SelectedValue = Session("Office")
后者不是强制性的,但在回发中你不需要这个,因为SelectedIndexChanged
事件处理程序将完成这项工作
答案 1 :(得分:0)
你似乎确信SelectedIndexChange事件是问题,但我想我会提到这个:
如果您将此行放在Page_Load的最顶部,如您所示:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ddlOffice.SelectedValue = Session("Office")
End Sub
由于下拉列表中应填充的数据尚未绑定,因此无法找到任何内容。您需要在用于将数据绑定到下拉列表的任何代码之后设置所选值,除非DDL中的项是静态的(在标记中定义)
答案 2 :(得分:0)
将所选值的分配移动到下拉列表的DataBound事件中,并将会话变量强制转换为字符串,如下所示:
ddlOffice.SelectedValue = (string)(Session("Office"))