__dopostback
轉載:
首先要記住這個函數的前面是兩個下劃線. __doPostBack= "_" + "_" + "doPostBack".
再介紹一下__doPostBack函數的作用。我們先來看一下_doPostBack函數的內容:
<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE4NDIzMDg2NDRkZMlHJoBQ9CYcWBtBK+zrfZzKoh/i" />
</div>
<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>
<div>
上面這段是直接從含有自動回傳功能控件的.net Web頁面的HTML源代碼里面粘帖過來的。
其中eventTarget 和eventArgument,是兩個就是用來存儲在回送的時候獲取是哪個控件觸發了回送,并且帶了什么參數。總之,調用__doPostBack函數可以實現客戶端控件調用服務器端控件的響應。或者是在javascript里面調用.net的服務器控件事件。這一點可以充分用在子窗口調用父窗口中某個服務器控件的服務器端的事件。
然后我們可以從LinkButton這個控件入手,分析一下 LinkButton的工作流程,就知道__doPostBack的使用方法了。因為微軟的LinkButton就是使用__doPostBack函數來達到使用客戶端的控件來調用服務器端的函數的。
我們可以運行一個包含有LinkButton的aspx頁面,查看他的源代碼,發現關于LinkButton這個控件的代碼竟然是一個超鏈接:
aspx中LinkButton的代碼:
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">button1</asp:LinkButton>
在html中的源碼中被翻譯成了:
<a id="LinkButton1" href="javascript:__doPostBack('LinkButton1','')">button1</a>
上面的代碼可以明顯的看出,LinkButton只不過就是一個超鏈接,他的鏈接就是執行javascript語句通過調用__doPostBack函數來調用服務器端的后臺代碼的。因此,在有LinkButton的頁面,會自動加上上面的__doPostBack函數。
但是在我們調用__doPostBack函數時,有些時候調用這個函數會出現"對象不存在"的腳本錯誤? 那是因為Html里面沒有__doPostBack函數體,一般在拖放那些有自動回傳功能的控件時,當把他的autoPostback屬性設為True,在運行的時候系統會自動添加__doPostback函數體,當然最直接的辦法就是添加一個LinkButton然后把其Text屬性設為空,切記不要設Visible屬性,因為如果Visible=false,在翻譯成Html時,直接就忽略LinkButton的存在了。
以前我 看到 許多關于 此函數的 用法。可是我一直沒有成功過。也沒有找到原因。
今天 ,突然 發現 我以前沒有成功的原因。
那就是 __doPostBack('Button1','') 函數中的第一個參數 必須是控件的名字,就是Name屬性的值 而不是 控件的ID!!
如網上 介紹說是:
function pCall()
{
__doPostBack('Button1','');
}
可以直接刷新頁面,執行后臺代碼。 (控件名如果含有":" ,需要預先替換為"$")
即使控件設為隱藏,(如button的visible = false),頁面上沒有生成button, 仍然可以這樣直接使用。
總結 說,此函數 用法要注意的地方太多,
第一, doPostBack 函數名,很特別,他的前面有兩個 下劃線。而且大小寫要區分好。
第二, 第一個參數 必須用 控件的 name 而不是ID。
控件名有個規律是一層一層的將父控件ID用$符號連接起來的。
MyDataGrid是DataGrid的ID,_ctl13是DataGridItem的ID,lbtnV1是這個linkbutton的ID。其實,通過查看源代碼可以看出 來的。
第三, 第二個參數 是傳給控件的Value值。
其實,第一個參數對應 Request.Form["__EVENTTARGET"]; 第二個參數對應 Request.Form["__EVENTARGUMENT"];
第四, 此函數是DOTNET 的服務器控件產生的。 所以要使用此函數,必須整個頁面上至少要有一個控件 可以回傳頁面。有些控件 的autoPostBack 必須設為TRUE。
其實,dotnet 服務器控件 在頁面上產生兩個隱藏的控件
一個名為__EVENTTARGET 另一個名為__EVENTARGUMENT
第一個的值是觸發事件的控件名
第二個的值是此控件所帶的值
轉載于:https://www.cnblogs.com/bfy-19/archive/2012/09/04/2670149.html
總結
以上是生活随笔為你收集整理的__dopostback的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6大黑科技app合集,绝对让你大开眼界
- 下一篇: 《DirectX 9.0 3D游戏开发编