会话变量在详细信息查看新取消事件后丢失值

时间:2014-06-12 00:09:05

标签: asp.net vb.net

我的网页上有3个控件,下拉列表,详细信息视图和列表视图。

下拉列表控制要在详细信息视图和列表视图中显示的记录。

当detailsview进入“新”模式时,我清除详细信息视图的项目并清除下拉列表的值:

 If e.CommandName = "New" Then
        lvRecipeSteps.Items.Clear()
        ddRecipeItemNumber.Items.Clear()
    End If

这显示了下拉列表中没有项目的页面,new / insert模式下的detailsview和listview。

当我点击取消事件时会发生问题,然后执行此代码

If e.CommandName = "Cancel" Then
        ddRecipeItemNumber.DataBind()
        ddRecipeItemNumber.SelectedValue = Session("Id").ToString()

    End If

会话变量Id在页面加载时分配

    Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load

    Session("Id") = ddRecipeItemNumber.SelectedValue

我收到错误:“未设置为对象的实例”指向:ddRecipeItemNumber.SelectedValue = Session(“Id”)。ToString()

我希望能够保存记录ID,即在新/插入事件开始之前的下拉列表中,然后如果事件被取消,则将控件设置回到插入/新之前显示的记录行动开始了。

我读到使用会话变量是一种很好的方法,但是我做错了,当执行事件取消时,值会丢失。

如果我能找到解决问题的方法,请告诉我。

非常感谢。

1 个答案:

答案 0 :(得分:0)

Session("Id") = ddRecipeItemNumber.SelectedValue置于以下条件中:

          if (!IsPostBack)
            {
                Session("Id") = ddRecipeItemNumber.SelectedValue;
            }

只需要将其转换为VB

更新1

如果您的代码不在Data控件中,那么您可以像下面的代码一样分配其选定的值:

在您的aspx表单上:

  <asp:DropDownList ID="DropDownList2" runat="server" 
                  OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged" 
                  AutoPostBack="true" ></asp:DropDownList>

关于你背后的代码:

  protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
    {
        Session["Id"] = DropDownList2.SelectedItem.Value;
    }

更新2

如果您想更改代码中的选定值,这将是正确的代码: 而不是这一行ddRecipeItemNumber.SelectedValue = Session("Id").ToString()

使用这个

  ddRecipeItemNumber.Items.FindByValue(Session("Id").ToString()).Selected = true;