我有一个listview,我填写了5个项目(SQL中的SELECT TOP 5)。下面是一个名为“查看全部”的按钮,它通过重新绑定列表视图并选择表格中的每个值而不是前5个来扩展列表视图。
这很好用。但是,我还需要对此列表中的项目进行投票,这是它不起作用的地方。当我投票时,我需要再次重新绑定列表视图。所以投票有一些我必须要做的事情。
但是第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。我不明白,除了布尔变化之外,该方法中的所有内容都会运行。
答案 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对象。类级值仍然不存在。