2010-10-05 42 views
1

我有一個.aspx文件,並且想要爲其添加一些HTML。問題是它不能被修改。如果我升級產品,這個.aspx文件將被覆蓋,我的修改將不得不再次完成。在ASP.NET中,如何將HTML添加到我無法修改的aspx

這是一個開源的產品,所以我可以看看代碼隱藏。再次,我無法修改它,因爲這會破壞我的升級路徑。另外,我需要添加永遠不會包含在產品中的功能,因此發送補丁程序是毫無用處的。

多數民衆贊成提到的類是部分類,所以我試圖在同一個命名空間創建另一個部分類的同名實施額外Page_PreRender。但是,由於這是在另一個程序集中,.net表示它不知道哪一個是正確的類。

有什麼辦法可以做到這一點?

回答

2

所以,你既不能碰這個頁面的.aspx,也包含其背後代碼的程序集?聽起來你需要創建一個PageAdapter

說你給這個網頁...

<%@ Page AutoEventWireup="true" ContentType="text/plain" Inherits="WebForm1" %> 

SomeControl: <asp:Literal runat="server" ID="SomeControl" /> 

...與此代碼之後(在你只能參考,不能修改組件)。

public class WebForm1 : Page { 
    protected void Page_Load(object sender, EventArgs e) { 
     var SomeControl = (Literal) FindControl("SomeControl"); 
     SomeControl.Text = "Value set from code-behind."; 
    } 
} 

你可以做的就是創建一個PageAdapter像這樣(在你自己組裝):

public class WebForm1Adapter : PageAdapter { 
    protected override void OnLoad(EventArgs e) { 
     base.OnLoad(e); 
     var SomeControl = (Literal) Page.FindControl("SomeControl"); 
     SomeControl.Text = "Value set from control adapter."; 
    } 
} 

最後,您需要通過創建browser definition file註冊您的超控:

<browsers> 
    <browser refID="Default"> 
    <controlAdapters> 
     <adapter controlType="WebForm1" adapterType="WebForm1Adapter" /> 
    </controlAdapters> 
    </browser> 
</browsers> 

檢查PageAdapterControlAdapter文檔以找出可以覆蓋常規頁面行爲的所有方法。

這應該使更新的第三方網頁更痛苦。不管你做什麼,合併更新本質上都是脆弱的。也就是說,除非第三方頁面的作者有意識地呈現某種形式的穩定API。

+0

非常好,這非常容易設置和完美工作,謝謝! – sebastiaan 2010-10-06 18:42:05

+0

Ps。我並不太擔心我對改變的約束力。它已經5年沒有這樣做了,如果是這樣,這是一個簡單的解決方案。 :-) – sebastiaan 2010-10-06 18:42:58

+0

很好的答案+1 – 2011-02-27 14:19:35

相關問題