我在类的顶部声明了一个布尔变量,当在页面上选择单选按钮时,变量设置为true,但是当重新加载页面时,变量将重置为false。我处理此问题的一种方法是使用static关键字,但我不确定这是否是处理此问题的最佳方法。这是我尝试在Page_Load事件中执行操作的类,但它仍然将变量重置为false。
public class SendEmail
{
bool AllSelected;
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
AllSelected = false;
}
}
protected void rbAll_SelectedIndexChanged(object sender, EventArgs e)
{
if(rbAll.SelectedValue == "All")
AllSelected = true;
}
public Send()
{
if(AllSelected)
{
//Send Email. Never runs because AllSelected is always false;
}
}
}
答案 0 :(得分:16)
重新加载页面时,会创建页面类的新实例,因此上次服务器交互中的任何值都将丢失。如果您希望将值保留在回发中,请将值放入viewstate:
bool AllSelected
{
get
{
object o = ViewState["AllSelected"];
if(o == null) return false;
return (bool)o;
}
set
{
ViewState["AllSelected"] = value;
}
}
ViewState集合以隐藏元素写入客户端浏览器中的表单,并在下次单击按钮或执行任何其他“回发”类型操作时发回并恢复。
答案 1 :(得分:2)
每次asp.net提供页面时,它都会创建页面类的新实例。这意味着AllSelected将始终自动初始化为false。
除非我在这里看不到,否则我的建议就是从SelectedIndexChanged方法调用Send()。
答案 2 :(得分:2)
您需要存储您的变量。我建议将它存储在ViewState中,或者如果你想远离ViewState,将它隐藏在页面的表单元素中。
另外,我没有看到调用Send的位置。
答案 3 :(得分:1)
您的布尔值是一个实例变量,因此每次创建类的新实例时,它都将获得默认值(bools为false)。
答案 4 :(得分:1)
请注意,对您网页的每个请求都使用了一个全新的网页类实例。这包括回发。
答案 5 :(得分:1)
不要跳过你或任何东西......但为什么不检查是否
rbAll.SelectedValue == "All"
发送功能中的?
没有存储......没有用不需要的数据填充ViewState或Session ...
答案 6 :(得分:0)
我真的不知道这在asp.net中是否会派上用场,但我在property.settings中创建了一个新的bool,以便每当我关闭或重新启动应用程序时它都会记住bool。但我认为这更适合winforms。