【问题标题】:Global Variable loses its value after page index changed in DataGrid在 DataGrid 中更改页面索引后,全局变量失去其值
【发布时间】:2018-07-17 08:58:28
【问题描述】:

我的问题是失去价值。我有一个带有标准 asp.net 分页的 DataGrid。当我更改页面索引时,名为“id”的全局变量失去了它的值。请帮帮我。

int id = 0;

void Payments()
{
    radioBtnList = GetData();
    radioBtnList.DataBind();
}

protected void Page_Load(object sender, EventArgs e)
{
    Payments();
    Response.Write(id); //  I get value 0 :(
}

protected void radioBtnList_Changed(object sender, EventArgs e)
{
    id = int.Parse(radioBtnList.SelectedItem.Text);
}

protected void dgw_pagechange(object source, DataGridPageChangedEventArgs e)
{
    dgw.CurrentPageIndex = e.NewPageIndex;
    dgw.DataBind();
}

【问题讨论】:

  • 当您更改页面时,您正在回发到服务器以运行 dgw_pagechance 事件。 Web 应用程序是无状态的。
  • dgw_pagechange(null,null);像这样 ?它不工作。
  • 不。我只是说,当您发回服务器时,id 将失去它的价值。
  • 好的。但是如何解决这个问题?
  • 每个请求(初始获取或回发)都由特定 Page 类的 fresh 实例提供服务。因此,任何类级别的值都会(重新)初始化。

标签: c# asp.net .net webforms aspxgridview


【解决方案1】:

与其将 ID 存储在页面中会在页面更改时重新加载的页面中,不如将其存储在某个将在回发过程中持续存在的位置。

示例可能是:

  • 会话对象
  • 一个数据库
  • 一个文本文件

【讨论】:

    【解决方案2】:

    你可以像这样使用 ViewState。

    int id = 0;
    void Payments ()
    {
        radioBtnList = GetData();
        radioBtnList.DataBind ();
    }
    
    protected void Page_Load (object sender, EventArgs e)
    {
      Payments();
      Response.Write(ViewState["id"]);
    }
    
    protected void radioBtnList_Changed (object sender, EventArgs e)
    {
       id = int.Parse (radioBtnList.SelectedItem.Text);
       ViewState["id"]=id;
    }
    
    
    protected void dgw_pagechange (object source, DataGridPageChangedEventArgs e)
    {
        dgw.CurrentPageIndex = e.NewPageIndex;
        dgw.DataBind();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 2017-12-16
      • 2020-07-25
      相关资源
      最近更新 更多