2

我在占位符中有一个带有动态用户控件的页面。当我加载页面时,它默认加载一个 UC(我们称之为“OrigUC”)。在这个页面上,我有一个按钮,它用另一个“NewUC”替换了 UC。所以这个按钮回发使用 ajax 并替换了 UC 。

在 NewUC 中,在我的 Page_Load 中,我检查 IsPostBack(),但由于某种原因,即使我第一次加载 UC,它仍然返回 true。为什么它返回 true,我认为 IsPostBack 将返回是否 UC,因为我在 UC 的 Page_Load 中检查它。我错过了什么吗?

好的,我现在更多地了解来自调用它的页面的用户控件上的 IsPostback... 那么我如何确定它是否是第一次从页面调用 UC 呢?

例子:

如果是第一次在页面内调用UC,我需要查询DB和外部WebS并绑定UC上的控件。如果我触发部分回发,我不想再次查询 DB 和 WebS。

If (!IsUserControlPostBack) 
{ 
// Step 1 Init of UC 
// Call to DB 
// Call to WebS 
} 
else 
{ 
// A Post back occured ...  
// It can be Page who triggered it or UC and I do not want to call Step 1 again 
// DO something else. 
}

C

4

3 回答 3

2

IsPostBack 属性确定请求是否为 POST HTTP 请求,而不是您的控件是否执行任何操作。因为页面是通过按钮提交的,所以请求是一个 PostBack 请求(在 ASP.NET 术语中)。基本上,这个属性不会做你认为它会做的事情,实际上并没有任何关系。

于 2012-03-14T12:09:45.383 回答
2

好的,我已经使用 ViewState 来存储我第一次进入时加载用户控件时设置的标志。

希望这可以帮助像我这样的另一个菜鸟:)

    private bool IsUCPostBack
    {
        get
        {
            object o = ViewState["S2UC"];
            return o == null;
        }
        set
        {
            ViewState["S2UC"] = true;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsUCPostBack)
        {
            IsUCPostBack = true; ... } else { ...   }
于 2012-03-16T09:57:59.737 回答
1

该按钮正在执行“回发”。IsPostBack 对于正在加载用户控件的 Page 对象为 true。

于 2012-03-14T12:10:05.113 回答