为啥 OnPreRender 被一遍又一遍地调用?

Posted

技术标签:

【中文标题】为啥 OnPreRender 被一遍又一遍地调用?【英文标题】:Why is OnPreRender being called over and over again?为什么 OnPreRender 被一遍又一遍地调用? 【发布时间】:2015-07-15 12:40:28 【问题描述】:

在我的 Sharepoint 2010 WebPart 中,我有以下代码:

protected override void OnPreRender(EventArgs e)

    base.OnPreRender(e);
    if (this.dpsvisWebPart != null && this.dpsvisWebPart.CustomTitleProp != null)
    
        lbl_Title.Text = String.Format("<h1>0</h1>", this.dpsvisWebPart.CustomTitleProp.ToString());

        if (this.dpsvisWebPart.CheckboxGenSection1)
        
            GenerateSection1();
        
        if (this.dpsvisWebPart.CheckboxGenSection2)
        
            GenerateSection2();
        
        if (this.dpsvisWebPart.CheckboxGenSection3)
        
            GenerateSection3();
        
        if (this.dpsvisWebPart.CheckboxGenSection4)
        
            GenerateSection4();
        
        if (this.dpsvisWebPart.CheckboxGenSection5)
        
            GenerateSection5();
        
        if (this.dpsvisWebPart.CheckboxGenSection6)
        
            GenerateSection6();
        
        if (this.dpsvisWebPart.CheckboxGenSection7)
        
            GenerateSection7();
        

        if (AnyCheckboxSelected())
        
            // Create Save button
            this.Controls.Add(new LiteralControl("<br />"));
            Button btnSave = new Button();
            btnSave.Text = "Save";
            btnSave.Click += new EventHandler(btnSave_Click);
            this.Controls.Add(btnSave);

            AddVerticalSpace();
        
    

在测试我的 WebPart 时(单击按钮,因此 - 大概 - 执行 btnSave_Click 处理程序,我发现没有保存任何内容。

单步执行代码,我看到 OnPreRender 正在被调用 - 事实上,一遍又一遍。

所以,我将它添加到 WebPart 类中:

private bool PreRenderAlreadyRun = false;

...然后把 OnPreRender() 的开头改成这样:

protected override void OnPreRender(EventArgs e)

    if (PreRenderAlreadyRun) return;
    PreRenderAlreadyRun = true;
    base.OnPreRender(e);
    . . .

...但是当输入 OnPreRender 时,PreRenderAlreadyRun 始终为 false,这种情况一遍又一遍地发生。其他断点没有到达(按钮点击等)大概是因为页面处于无限循环中。

如何让 OnPreRender() 只运行一次?或者这段代码应该在 Page_Load() 而不是 OnPreRender() 中,还是...???

【问题讨论】:

【参考方案1】:

解决方案是将 OnPreRender() 中的代码移动到 Page_Load()

显然,就像在堆场一样,渲染发生了很多次,而页面只加载了一次。这是我的理论,我会坚持下去(不管怎样)。

【讨论】:

以上是关于为啥 OnPreRender 被一遍又一遍地调用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 axios 使用 React.useEffect 一遍又一遍地从 Rails 后端获取调用?

尽管删除了 SMS 或 CALL LOG 权限,应用程序更新在 Play 商店中被一遍又一遍地拒绝

为啥这不会一遍又一遍地返回一个新值?爪哇

为啥在反应的“useState”钩子中一遍又一遍地设置初始状态

为啥我的组件一遍又一遍地重新绘制而没有发生任何变化?

一遍又一遍地创建 PHP MVC 控制器