原因是script少了下面這一段,以致呼叫不到
<script type="text/javascript">
<!--
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
// -->
</script>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
上方的 JavaScript 區塊,做的事如下:
1. 取得網頁中的 form1 物件
2. 判斷是否 submit
3. 將傳進來的二個參數寫進最上方的二個隱藏欄位(hidden)
4. 發送 submit
---------------------------------------------------------------
並非任何控制項都具備 PostBack 功能 所以有時只有拉Button時ASP.NET並不會產生上面script程式
控制項必須實作 IPostBackEventHandler 介面才會具有 PostBack 功能
__doPostBack(__EVENTTARGET,__EVENTARGUMENT)
_doPostBack是通過__EVENTTARGET,__EVENTARGUMENT兩個隱藏控制項向服務端發送控制要求的
__EVENTTARGET為要呼叫的控制項名稱,如果要呼叫的控制項是子控制項,用''$'或':'分割父控制項:子控制項,
__EVENTARGUMENT 是調用事件時的參數,通常為空
Control如果含有":" ,需要預先替替換"$"
但是在我們呼叫__doPostBack函數時,有些時候呼叫這個函數會出現"物件不存在"的錯誤?
那是因為Html裏面沒有__doPostBack函數物件,一般在拖放那些有自動回傳功能的控制項時,
當把他的autoPostback屬性設為True, 在運行的時候系統會自動添加__doPostback函數體,
當然最直接的辦法就是添加一個LinkButton然後把其Text屬性設為空,切記不要設 Visible屬性,
因為如果Visible=false,在翻譯成Html時,直接就忽略LinkButton的存在了。
參考:http://maxwell-tech.blogspot.com/2008/10/dopostback.html
