C#变量重置或未更改

时间:2015-03-01 13:51:44

标签: c# sql asp.net

我有一个listview,我填写了5个项目(SQL中的SELECT TOP 5)。下面是一个名为“查看全部”的按钮,它通过重新绑定列表视图并选择表格中的每个值而不是前5个来扩展列表视图。

这很好用。但是,我还需要对此列表中的项目进行投票,这是它不起作用的地方。当我投票时,我需要再次重新绑定列表视图。所以投票有一些我必须要做的事情。

  1. 检查列表视图是否已扩展(如果用户已单击“查看全部”)。
  2. 处理所有处理投票的db-calls。
  3. 重新绑定列表,以便用户可以看到他/她所做的更改。
  4. 但是第1步无效。当用户扩展我的listView时,我设置了布尔extended=true。我在投票后检查了这一点。但由于某种原因,布尔值总是返回false。

    代码:

    创建变量:

    private Boolean extended = false;
    protected void Page_Load(object sender, EventArgs e){
    

    我点击“查看全部”扩展列表:

    protected void LinkButtonviewFullCat_Click(object sender, EventArgs e)
    {
       String cmdText1 = "SELECT * FROM [table] WHERE ([col] = @HFID) ORDER BY [rating] DESC"; //extend the list
       //This is where I bind the list using cmdText1
       extended = true; //never is true when I check in method below
    }
    

    我对列表中的某些内容进行投票并重新绑定它:

    protected void BindList()
    {
        System.Diagnostics.Debug.WriteLine(extended);
        String cmdText1;
        if (extended == true)
        {
           cmdText1 = "SELECT * FROM [table] WHERE ([col] = @HFID) ORDER BY [rating] DESC"; 
            //keep the list extended after vote
        }
        else
        {
           cmdText1 = "SELECT TOP 5 * FROM [table] WHERE ([col] = @HFID) ORDER BY [rating] DESC"; 
            //keep the list short after vote
        }
    //Code for handeling cmds
    }
    

    我创建它时尝试不将布尔设置为false,因为我认为这可能是问题,但这并没有改变任何东西。它仍然总是返回false。我不明白,除了布尔变化之外,该方法中的所有内容都会运行。

1 个答案:

答案 0 :(得分:1)

HTTP是无状态的。也就是说,您的页面级代码不会从一个请求持续到下一个请求。因此,每次向您的页面发出请求时,都会从头开始重新初始化该类。

因此值为false,因为它已初始化为false

private Boolean extended = false;

为了在页面请求之间存储值,您需要在某处保留该值。在这种情况下,一种常见的方法可能是将其持久化到会话状态。像这样:

Session["extended"] = true;

然后当你需要读取值时:

bool extended;
if (!bool.TryParse(Session["extended"], out extended))
{
    // value couldn't be parsed
}
// proceed with logic

与Form对象继续存在的WinForms不同,WebForms在为任何给定请求提供服务后处理Page。因此每次都会重新创建Page对象。类级值仍然不存在。