2014-11-06 24 views
2

嗨,並提前致謝。Page_Init與Page_PreRender與渲染LI和CSS衝突

我有一個問題,我在頁面頂部顯示了一些鏈接(它們不是麪包屑),對於需要打開/關閉的不同環境以及用戶在頁面上突出顯示的一個。當我最初把頁面一起調用,顯示的鏈接是在Page_Init像這樣在母版頁功能:

protected new void Page_Init(object sender, EventArgs e) 
{ 
    SetTabs(session); 
} 

protected void SetTabs(session) 
{ 
    makeTab.add(session.param, session.param); 
    makeTab.generate(); 
} 

protected void add(param, param) 
{ 
    Tabs.add(new tab() { link = param, name = param }); 
} 

protected void generate() 
{ 
    foreach(tab t in Tabs) 
    { 
     liTab.Text = string.Format("<li><a href=\"{2}\">{1}</a>", t.name, t.link); 
    } 
} 

是那些獲得創建的鏈接是項目的無序列表內嵌顯示。

而且我有一個應用樣式的變化,突出了與用戶是對從頁面本身的Page_Load中調用頁面相關聯的鏈接一個單獨的方法:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Master.makeTabBlue(nameOfTab); 
} 

然而,爲了讓隱藏的標籤重新正確顯示,我必須將SetTabs(會話)移動到Page_PreRender函數中,以便在保存頁面後更新會話時調用它們,但現在我已經完成了使得藍色標籤不再有效果。我已閱讀了關於頁面生命週期的內容,我認爲在makeTabBlue中呈現的CSS僅在Page_PreInit或Page_Init循環中有效,但如果我將makeTabBlue移動到其中任一頁面,則頁面開始拋出控件可能「因爲它們在PreRender之前不會被調用,所以這是有意義的。並在保存功能中調用它也沒有效果。我應該從哪裏調用makeTabBlue以使其正常工作?

UPDATE:

在這種特殊情況下,解決我的問題是離開SetTabs在Page_Init,離開makeTabBlue在Page_Load,我增加了一個獨特的類的李和我隱藏,顯示通過將值存儲在隱藏字段中並通過JavaScript鏈接,並在js加載時檢查該字段。

回答

1

上次您可以對頁面執行某些操作的位置是Page_LoadComplete()(PreRender之前的那個)方法。如果您在此處進行更改,標記仍然會生效。這應該允許您在init中運行一些代碼,然後再運行其他代碼,同時還會影響前端。

另一種選擇是在後面的代碼中加一個變量:

protected string TabColour = "some default colour"; 

然後在前端,做這樣的事情:

<div style='color:#<%= TabColour %>'></div> 

如果上面的DIV的例子是你的標籤。

這將允許您在prerender事件中設置TabColour,但仍會在前端顯示正確的顏色,因爲它在Rendering事件中評估。我更喜歡這種方法,因爲頁面生命週期可能非常棘手,並且可以避免受到它的限制。

+0

這是否意味着我應該嘗試將SetTabs移動到Page_LoadComplete或makeTabBlue?目前SetTabs在PreRender中,所以移動makeTabBlue在Page_LoadComplete中不起作用,因爲它仍然在PreRender之前。 – 2014-11-06 21:46:10

+0

@ElaineK - 看我的編輯,這可能是一個更好的解決方案。 – webnoob 2014-11-06 22:13:10