IsPostback定制

时间:2011-12-29 15:06:20

标签: c# asp.net webforms postback

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

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

调试时,将test设置为false,当test为true时,按F11后,测试保持不变!我觉得这很奇怪。你知道为什么吗?谢谢。

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

每当您阅读该属性时,您的getter会将该字段重置为原始Page.IsPostBack

答案 2 :(得分:0)

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

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