在制作控件的時候容易遇到“ 呈現控件時出錯”“ 發生了未處理的異常。未將對象引用設置到對象 的實例。” 這樣的錯誤,如下圖:( 也有可能僅僅只是因為未設置runat="server" 標簽而導致該錯誤, 請先檢查該項。)
但是在編譯時/ 運行時也都是沒有錯誤的。
分析
如圖所示的情況我們稱之為“ 設計時” 以區別於“ 編譯時”/“ 運行時” 。
設計時 :在ASP.NET 環境中也就是當我們在Visual Studio 中使用網頁設計器進行編輯的時候。直接 的理解就是在ASPX 頁面切換到“ 設計” 的時候。
編譯時 :直接的理解就是當你進行編譯的時候,通常這個時候的錯誤是由類型檢查,參數匹配等顯式 可直接通過語法約束所限制的錯誤。
運行時 :直接的理解就是當你進行預覽/ 運行的時候。通常這個時候的錯誤則是由具體的異常,邏輯 錯誤所組成的。
讓我們分析控件在設計時的表現,我們的控件在設計時的時候,VS 智能地模擬輸出控件在運行時的樣 貌,控件的呈現通過了一定順序的方法,並最終形成了當前輸出。按照標准,我們應該是在Render 或 RenderContents 中對控件進行了輸出的操作( 事實上其他也是可以,但我們通常也不那麼做,或者說更 多的“ 呈現控件時出錯” 的異常主要來自於Render 或RenderContents) 。
從錯誤的提示“ 未將對象引用設置到對象的實例。” 從這一句話來看,也就是說,有一個或者以上 的對象的實例在沒有賦初值的情況下就被使用了。
讓我們窺視一下我們的代碼:
protected override void RenderContents(HtmlTextWriter writer)
{
UpButton.Text = Page.Server.HtmlDecode(UpButton.Text);
DownButton.Text = Page.Server.HtmlDecode(DownButton.Text);
base.RenderContents(writer);
}
因為該控件在設計的時候需要有一個向上的按鈕和一個向下的按鈕,分別需要用兩個特殊的標點符號 向上和向下,而這兩個符號需要通過設置如下所示的代碼編號才可以正確地被浏覽器呈現:
private string upButtonText = "∧";
private string downButtonText = "∨";