2012-08-07 57 views
1

我想加載作爲獨立宏在umbraco中存在的剃鬚刀腳本。我正在使用umbraco 4.7.0在umbraco模板中渲染頁面加載時的宏控制

我基本上在做地理定位,因此需要在頁面加載時每次運行腳本。所以我要尋找的東西,如:

<script type="c#" runat="server"> 
protected void Page_Load(object sender, EventArgs e) 
    { 
    Call the Macro here 
    } 

顯然,我可以在模板

<umbraco:Macro Alias="GeoTargetting" runat="server" /> 

做到這一點,但我需要在頁面加載任何控件之前執行這個宏。

PLease help。

感謝

+0

你能告訴一下確切需要做什麼嗎..是否在宏頁面加載中運行任何代碼? – 2012-08-07 11:50:29

+0

@mahesh:謝謝。基本的需求是避免基於URL緩存和加載宏內容。會發生什麼是,如果我更改頁面的url,它會加載頁面,但宏被緩存,因此我無法獲取宏中的確切內容。 即使是回發,我在宏中需要調用的條件也很少。 – Aneesh 2012-08-08 03:55:23

+0

我不確定你的意思是「宏被緩存,因爲我無法獲得宏中的確切內容」。如果您想在所有請求中執行任何操作,您可以使用** httpHandler **來覆蓋所有頁面生命週期事件。所以所有的頁面事件都將通過這個處理程序事件進行路由。 – 2012-08-08 04:21:59

回答

0

這看似正常的工作:

模板:

<umbraco:Macro Alias="Sandbox" runat="server"></umbraco:Macro> 
<asp:Label runat="server" ID="Label1" Text="Yo"></asp:Label> 

宏腳本:

@using System.Web.UI.WebControls 
@using umbraco.MacroEngines 
@inherits DynamicNodeContext 
@{ 
    Page page = HttpContext.Current.Handler as Page; 
    page.Load += new EventHandler(page_Load); 
} 

@functions 
{ 
    static void page_Load(object sender, EventArgs e) 
    { 
     Page page = sender as Page; 
     Label label = FindControlRecursive(page, "Label1") as Label; 
     label.Text = "Hello"; 
    } 

    private static Control FindControlRecursive(Control Root, string Id) 
    { 
     if (Root.ID == Id) 
      return Root; 

     foreach (Control Ctl in Root.Controls) 
     { 
      Control FoundCtl = FindControlRecursive(Ctl, Id); 

      if (FoundCtl != null) 
       return FoundCtl; 
     } 

     return null; 
    } 
} 

注意:FindControlRecursive()方法是從這個forum thread