所以,你既不能碰這個頁面的.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>
檢查PageAdapter
和ControlAdapter
文檔以找出可以覆蓋常規頁面行爲的所有方法。
這應該使更新的第三方網頁更痛苦。不管你做什麼,合併更新本質上都是脆弱的。也就是說,除非第三方頁面的作者有意識地呈現某種形式的穩定API。
非常好,這非常容易設置和完美工作,謝謝! – sebastiaan 2010-10-06 18:42:05
Ps。我並不太擔心我對改變的約束力。它已經5年沒有這樣做了,如果是這樣,這是一個簡單的解決方案。 :-) – sebastiaan 2010-10-06 18:42:58
很好的答案+1 – 2011-02-27 14:19:35