首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IsPostback定制

IsPostback定制
EN

Stack Overflow用户
提问于 2011-12-29 23:06:20
回答 3查看 162关注 0票数 0

我正在尝试创建我的“自定义IsPostBack”,我所做的只是创建了一个bool属性,

代码语言:javascript
复制
bool test;
public bool MyPostBack
{
    get{ test = Page.IsPostBack; return test; }
    set{ test = value; }
}

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-29 23:11:40

在属性getter中要做的第一件事就是重置它:

代码语言:javascript
复制
test = Page.IsPostBack;

所以,设置你的MyPostBack属性基本上不会有任何效果,因为你设置的值会在你每次获取属性值的时候被覆盖。

你可能想要更多像这样的东西:

代码语言:javascript
复制
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属性的值。

票数 6
EN

Stack Overflow用户

发布于 2011-12-29 23:11:06

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

票数 2
EN

Stack Overflow用户

发布于 2011-12-30 23:40:05

我想提出另一种方法来做这件事。最有可能的情况是,您希望将其保留在会话中,因此可以执行以下操作:

代码语言:javascript
复制
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中有更多的计算。否则,根据我的经验,当在超过一两种情况下设置它的值时,代码可能会变得不可读,并且不太容易维护。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8669475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档