page. verifyrenderinginserverform 方法
确認在運作時為指定的 asp.net 伺服器控件呈現 htmlform 控件
[c#]
public virtual voidverifyrenderinginserverform(
controlcontrol
);
參數
control
asp.net 伺服器控件,它必須位于 htmlform 控件中。
異常
異常類型 httpexception
條件
指定的伺服器控件在運作時不包含在 htmlform 伺服器控件的開始和結束标記之間。
備注
如果該頁目前不處于頁進行中的呈現階段,且位于 <form runat=server> 标記内,則該方法将引發異常。需要位于伺服器窗體内的控件可以在呈現期間調用該方法,以便在它們被放置到外面時顯示明确的錯誤資訊。發送回或依賴于注冊的
腳本塊的控件應該在 control.render
方法的重寫中調用該方法。呈現伺服器窗體元素的方式不同的頁可以重寫該方法以在不同的條件下引發異常。
如果回送或使用用戶端腳本的伺服器控件沒有包含在 htmlform 伺服器控件 (<form runat="server">) 中,它們将無法正常工作。這些控件可以在呈現時調用該方法,以在它們沒有包含在 htmlform 控件中時提供明确的錯誤資訊。
開發自定義伺服器控件時,通常在為任何類型的輸入标記重寫 render 方法時調用該方法。這在輸入控件調用 getpostbackeventreference 或發出用戶端腳本時尤其重要。複合伺服器控件不需要作出此調用。
除非要建立替換頁架構,否則請不要重寫此方法。
重載verifyrenderinginserverform,然後讓它什麼也不做。
public override void verifyrenderinginserverform(control control)
{
//base.verifyrenderinginserverform (control);
}
跟蹤了一下,發現頁面的每個伺服器端控件都會執行這個方法,結合我自己的實際情況,做了點小修改
if (!control.gettype().name.equals("datagridlinkbutton"))
{
base.verifyrenderinginserverform (control);
}
因為我需要獲得一個控件的html輸出到畫面上,而這個控件是我new出來的,顯然不可能在<form runat=server>
标記内,于是我就加了個判斷,雖然還是沒有做到十全十美(就是如果畫面上本來就有的datagridlinkbutton也不做驗證了。)但感覺比起直接
把base方法調用注釋掉還是合情合理些。