【问题标题】:Session in not passed between pages c#页面之间没有传递会话c#
【发布时间】:2026-01-22 07:20:07
【问题描述】:

我正在使用 VS 2013 和 Mysql,在我的一个页面中,我将选择查询放在此视图的网格视图中,并且我为每一行都有一个按钮,这样如果我按下一个行按钮,我就会打开一个新窗口具有来自 gridview 的列 ID(这是第一个列)。

网格视图按钮代码:

                     <Columns>

                <asp:TemplateField ><ItemTemplate><asp:Button ID="gridbutton" runat="server" Text="Plus de détails" OnClientClick="basicPopup();return false;" RowIndex='<%# Container.DisplayIndex %>' OnClick="button_click" /></ItemTemplate></asp:TemplateField>

          </Columns>

button_click方法的代码:

 protected void button_click(object sender, EventArgs e)
    {
        Button gridbutton = sender as Button;
        int rowIndex = Convert.ToInt32(gridbutton.Attributes["RowIndex"]);
        string n = "l'index" + rowIndex + "";
     Session["idProjet"] = GridView1.Rows[rowIndex].Cells[2].Text;
        //string idProjet = Convert.ToString(Session["idProjet"]);
       // Alert.Show(idProjet);

    }

我只是使用最后两行来确保我得到了价值,而且我得到了正确的价值。 这是我想要获取会话值的第二页的代码:

   protected void Page_Load(object sender, EventArgs e)
        {

                string idProjet = Convert.ToString(Session["idProjet"]);
                Alert.Show(idProjet);

        }

但我得到的只是一个空结果。

【问题讨论】:

  • 不确定问题出在哪里,但您确实应该使用查询字符串在页面之间传递数据。在这种情况下,会话状态不是要走的路。
  • “返回false”不是吗?在 OnClientClick 中阻止请求被发送到服务器?
  • 我不这么认为,因为我已经在其他页面中使用了相同的东西,并且变量会话从一个页面传递到另一个页面。

标签: c# mysql asp.net visual-studio


【解决方案1】:

在您的按钮代码中,您同时拥有 onclientclick 和 click 事件。

在您的 clickclick 事件中,我邀请您打开不同的页面。请注意,首先执行客户端单击。所以新页面已经打开了。您的服务器端事件稍后执行。这就是会话在新表单中不可用的原因。

<asp:Button ID="gridbutton" runat="server" Text="Plus de détails" OnClientClick="basicPopup();return false;" RowIndex='<%# Container.DisplayIndex %>' OnClick="button_click" />

在这种情况下,您必须将 idProject 作为查询字符串传递给新页面。

【讨论】: