IsPostback Customized

本文关键字:Customized IsPostback | 更新日期: 2023-09-27 18:19:12

我正在尝试创建我的'custom IsPostBack',我所做的就是创建一个bool属性,

bool test;
public bool MyPostBack
{
    get{ test = Page.IsPostBack; return test; }
    set{ test = value; }
}

调试时,已设置,例如,值为false,当测试为真,按下F11后,测试保持原样!我觉得这很奇怪。你知道为什么吗?谢谢你。

IsPostback Customized

你在属性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属性的值。

每次读取属性时,getter都会将字段重置为原始的Page.IsPostBack

我想建议另一种方法。您很可能希望将其保留在会话中,因此您可以执行以下操作:

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中增加一些计算。否则,根据我的经验,当在一到两种情况下设置它的值时,代码可能变得不可读,并且不容易维护。

相关文章: