如何在asp.net中加载页面后保留全局字符串变量的值

时间:2011-04-01 16:19:59

标签: asp.net global-variables datalist

我在保留我在scoop顶部定义的字符串变量时遇到问题,每次页面加载时字符串值变为null。下面是代码的片段:

public partial class Caravan_For_Sale : System.Web.UI.Page
{
string check;
PagedDataSource pds = new PagedDataSource(); //paging

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {

        BindGrid();
    } 

}

private void BindGrid()
{
    DataTable dt = null;
    switch (check)
    {
        case "0-1500":
            break;
        case "1500-2000":
            dt = caravans.GetFilterbyPrice1();
            break;

        case "2000+":

            break;

        default:
             dt = caravans.GetAllCaravans();
            break;
    }
   // DataTable dt = caravans.GetAllCaravans();

    pds.DataSource = dt.DefaultView;
    pds.AllowPaging = true;
    pds.PageSize = 3;//add the page index when item exceeds 12 //Convert.ToInt16(ddlPageSize.SelectedValue);
    pds.CurrentPageIndex = CurrentPage;
    DataList1.RepeatColumns = 3; // 4 items per line
    DataList1.RepeatDirection = RepeatDirection.Horizontal;

    DataList1.DataSource = pds;
    DataList1.DataBind();

    lnkbtnNext.Enabled = !pds.IsLastPage;
    lnkbtnPrevious.Enabled = !pds.IsFirstPage;

    doPaging();

}
  protected void lnkPrice2_Click(object sender, EventArgs e)
{
    LinkButton _sender = (LinkButton)sender;
    check = _sender.CommandArgument;
 //  items["test"] = test;
    DataTable dt = caravans.GetFilterbyPrice2();
    if (dt.Rows.Count < 3)
    {
        lnkbtnNext.Enabled = false;
        lnkbtnPrevious.Enabled = false;

    }

    CurrentPage = 0;
    BindGrid();

}

   protected void dlPaging_ItemCommand(object source, DataListCommandEventArgs e)
{
    if (e.CommandName.Equals("lnkbtnPaging"))
    {

        CurrentPage = Convert.ToInt16(e.CommandArgument.ToString());
        BindGrid();
    }
}

每次dlPaging_ItemCommand变为活动状态(页面加载)时,字符串检查将变为null。任何帮助或建议将不胜感激

3 个答案:

答案 0 :(得分:1)

您的类在每次加载时都会被实例化,因此它不会有从页面视图到页面视图的全局变量。你需要以某种方式存储它。就像在查询字符串或会话中一样。您也可以使用viewstate。

例如

ViewState(“Variable”)=“你的字符串”

答案 1 :(得分:1)

据我所知,您有两种选择:

1)再次加载。
不确定你的情况是否可行。这通常在处理数据库查询时完成。

2)将它放在ViewState中,如下所示:

ViewState["check"] = check;

然后加载它:

string check = Convert.ToString(ViewState["check"]);

答案 2 :(得分:0)

Viewstate是要走的路,正如其他人已经回答的那样。无论你做什么,请不要在会议中填写。