[英]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.