我正在尝试创建我的“自定义IsPostBack”,我所做的只是创建了一个bool属性,
bool test;
public bool MyPostBack
{
get{ test = Page.IsPostBack; return test; }
set{ test = value; }
}在调试时,设置了值为假,当测试为真时,按下F11后,测试保持原样!我觉得这很奇怪。你知道为什么吗?谢谢。
发布于 2011-12-29 23:11:40
在属性getter中要做的第一件事就是重置它:
test = Page.IsPostBack;所以,设置你的MyPostBack属性基本上不会有任何效果,因为你设置的值会在你每次获取属性值的时候被覆盖。
你可能想要更多像这样的东西:
bool test;
public bool MyPostBack
{
get{ return test; }
set{ test = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
MyPostBack = Page.IsPostBack;
}私有变量(test)在Page Load事件中初始化为页面的IsPostBack属性的值。
发布于 2011-12-29 23:11:06
每次读取该属性时,getter都会将字段重置为原始的Page.IsPostBack。
发布于 2011-12-30 23:40:05
我想提出另一种方法来做这件事。最有可能的情况是,您希望将其保留在会话中,因此可以执行以下操作:
public bool MyPostBack
{
get
{
if (Session["MyPostBack"] == null)
Session["MyPostBack"] = Page.IsPostBack;
return (bool)Session["MyPostBack"];
}
set
{
Session["MyPostBack"] = value;
}
}这样,MyPostBack将始终返回一个有效值,即使您没有对其进行初始化。它甚至在Page_Load之前就可以使用了(例如,在Page_Init中)。
我还认为最好是根本没有setter,而是在getter中有更多的计算。否则,根据我的经验,当在超过一两种情况下设置它的值时,代码可能会变得不可读,并且不太容易维护。
https://stackoverflow.com/questions/8669475
复制相似问题