C# 正在尝试将选定的DropDownList传递给会话

C# 正在尝试将选定的DropDownList传递给会话,c#,asp.net,session,drop-down-menu,C#,Asp.net,Session,Drop Down Menu,我试图将dropdownlist的值传递给会话变量,然后将该值转换为审阅页面的文本标签。然后需要将该值传递到sql表(不是问题)。问题在于,每次我试图调用标签中dropdownlist的值(或索引,我尝试了两者),我都会得到一个空异常。 以下是我在第一页上的一个下拉列表的代码,以及在下一页上尝试从创建的会话绑定该下拉列表的代码: FirstPage.aspx <asp:DropDownList ID="ddlInnoc" runat="server"> <asp:ListIte

我试图将dropdownlist的值传递给会话变量,然后将该值转换为审阅页面的文本标签。然后需要将该值传递到sql表(不是问题)。问题在于,每次我试图调用标签中dropdownlist的值(或索引,我尝试了两者),我都会得到一个空异常。 以下是我在第一页上的一个下拉列表的代码,以及在下一页上尝试从创建的会话绑定该下拉列表的代码: FirstPage.aspx

<asp:DropDownList ID="ddlInnoc" runat="server">
<asp:ListItem Value="0">No</asp:ListItem>
<asp:ListItem Value="1">Yes</asp:ListItem>
</asp:DropDownList>
SecondPage.aspx

<asp:Label ID="lblJabs" runat="server"></asp:Label>
请有人告诉我我只是太傻了! 我收到的例外情况如下:

Object reference not set to an instance of an object.

Description: An unhandled exception occurred during the execution of the current web
request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 


Line 11:     {
Line 12:         //Capture session values from previous page and send to relevant    labels
Line 13:         **lblGroup.Text = Session["NoInGroup"].ToString();**
Line 14:         lblFirstName.Text = Session["FirstName"].ToString();
Line 15:         lblMiddleName.Text = Session["MiddleName"].ToString();

有点奇怪的是,我可以在不同的页面上成功获取不同DropDownList的SelectedIndex。这让我毛骨悚然

在打开第二页之前,请确保您正在进行回发。
Session[“Jabs”]=ddlInnoc.SelectedIndex
应在selectedindexchanged方法中,并且应在dropdownlist上设置autpostback,例如:

<asp:DropDownList ID="ddlInnoc" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlInnoc_SelectedIndexChanged">
   <asp:ListItem Value="0">No</asp:ListItem>
   <asp:ListItem Value="1">Yes</asp:ListItem>
</asp:DropDownList>
在大多数情况下,您可能不需要所选索引,因为这只是dropdownlist中项目的顺序

要确保会话始终被填充,您可以在加载页面上设置会话:

protected void Page_Load(object sender, EventArgs e)
{
   if (!Page.IsPostBack)
   {
      Session["Jabs"] = ddlInnoc.SelectedIndex;
   }
}
另外:在使用会话时,您应始终注意会话可能会过期,因此在使用前应始终检查NULL,例如:

SecondPage.aspx.cs

Session["Jabs"] = ddlInnoc.SelectedIndex;
lblJabs.Text = Session["Jabs"].ToString();
lblJabs.Text = (Session["Jabs"] == null ? "Default Value" : Session["Jabs"].ToString());

确保在打开第二页之前进行回发。
Session[“Jabs”]=ddlInnoc.SelectedIndex
应在selectedindexchanged方法中,并且应在dropdownlist上设置autpostback,例如:

<asp:DropDownList ID="ddlInnoc" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlInnoc_SelectedIndexChanged">
   <asp:ListItem Value="0">No</asp:ListItem>
   <asp:ListItem Value="1">Yes</asp:ListItem>
</asp:DropDownList>
在大多数情况下,您可能不需要所选索引,因为这只是dropdownlist中项目的顺序

要确保会话始终被填充,您可以在加载页面上设置会话:

protected void Page_Load(object sender, EventArgs e)
{
   if (!Page.IsPostBack)
   {
      Session["Jabs"] = ddlInnoc.SelectedIndex;
   }
}
另外:在使用会话时,您应始终注意会话可能会过期,因此在使用前应始终检查NULL,例如:

SecondPage.aspx.cs

Session["Jabs"] = ddlInnoc.SelectedIndex;
lblJabs.Text = Session["Jabs"].ToString();
lblJabs.Text = (Session["Jabs"] == null ? "Default Value" : Session["Jabs"].ToString());

但是如果我想让它传递默认值,比如组中的数字,哪一个是1呢?那么您需要将
Session[“Jabs”]=ddlinoc.SelectedItem.Text
添加到页面加载方法中。我将把代码添加到应答器中,是的,堆栈跟踪显示另一个DropDownList,在同一页上有几个。所有下拉列表中的用户输入都需要以这样一种方式捕获,即它们将作为二进制值发布到SQL表中,因此SelectedIndex很好,因为所有下拉列表都只有两种选择。使用单选按钮会更容易吗?我只是想到了这一点……我发现dropdownlists更容易一些,但这完全取决于最终用户的偏好——它们在代码上几乎相同。问题解决了吗?但是如果我想让它传递默认值,比如组中的数字,即1,该怎么办?然后您需要将
Session[“Jabs”]=ddlinoc.SelectedItem.Text
添加到页面加载方法中。我将把代码添加到应答器中,是的,堆栈跟踪显示另一个DropDownList,在同一页上有几个。所有下拉列表中的用户输入都需要以这样一种方式捕获,即它们将作为二进制值发布到SQL表中,因此SelectedIndex很好,因为所有下拉列表都只有两种选择。使用单选按钮会更容易吗?我只是想到了这一点……我发现dropdownlists更容易一些,但这完全取决于最终用户的偏好——它们在代码上几乎相同。问题解决了吗?