簡體   English   中英

為什么要一遍又一遍地調用OnPreRender?

[英]Why is OnPreRender being called over and over again?

在我的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()中,或者...?

解決方案是將OnPreRender()中的代碼移動到Page_Load()

顯然,就像在堆場一樣,渲染會發生很多次,而頁面只會加載一次。 那是我的理論,我一直堅持下去(無論如何,現在)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM