【问题标题】:IsPostback CustomizedIsPostback 自定义
【发布时间】:2011-12-29 15:06:19
【问题描述】:

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

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

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

【问题讨论】:

  • 您需要调用MyPostBack 来更改test
  • 你的意思是我需要做:set { MyPostBack = value;}
  • 你到底想做什么?
  • 我正在尝试创建我的个人 IsPostBack,在这里我可以获得真正的 IsPostBack 值,但我也可以“设置”它
  • 你可能想要return test || Page.IsPostBack。然而,这听起来是个坏主意。你想完成什么?

标签: c# asp.net webforms postback


【解决方案1】:

你在属性 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)在页面加载事件中被初始化为页面的 IsPostBack 属性的值。

【讨论】:

  • 问题是在调试过程中,一步步遍历代码时,var test 没有正确设置!我会试试这个非常感谢你
  • 对!变量初始化器会在页面生命周期中过早地设置该值。变量初始化程序执行时,Page.IsPostBack 设置不正确。您需要在 Page_Load 事件中设置测试变量。我已经更新了我的答案以反映这一点。
【解决方案2】:

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

【讨论】:

  • 好的,现在我明白了,谢谢大家,由于我的代码中的错误,当我在调试期间也得到它并试图改变它的值时,它也被重置了!这解决了我的问题,现在我已经完成了我的第一个电子商务网站 :) 谢谢大家!
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2011-05-19
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多