User Tools

Site Tools


study:cs-webbrowser:20250318-001:index

_doPostBack用法總結 (2025-03-18)

Local Backup

__doPostBack用法 【csdn】

  • 今天寫ajax程式時,需要重新從後台載入數據,所以用了__doPostBack方法。 __doPostBack並不是自己寫的方法,是由asp.net 自己加入頁面中的方法。我們執行Asp.net程式後,會在產生的html原始碼中看到__doPostBack方法,其程式碼如下:
  • <script type="text/javascript">
    //<![CDATA[
    var theForm = document.forms['aspnetForm'];
    if (!theForm) {
        theForm = document.aspnetForm;
    }
    function __doPostBack(eventTarget, eventArgument) {
        if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
            theForm.__EVENTTARGET.value = eventTarget;
            theForm.__EVENTARGUMENT.value = eventArgument;
            theForm.submit();
        }
    }
    //]]>
    </script>
  • __doPostBack說明: __doPostBack可以實作客戶端控制項呼叫伺服器端控制項的回應。
  • __doPostBack方法的格式為:
    • __doPostBack(eventTarget,eventArgument)
    • 參數:
      • eventTarget:是要觸發的伺服器控制項的客戶端ID
      • eventArgument:參數這個兩個值在後台可以透過下邊方法得到:
        • Request["__EVENTTARGET"] :取得得到引發頁面PostBack 的控制項
      • 例子,回發UpDataPanel,透過參數取得資料。
    • 1)先呼叫doPostBack觸發回發:
      • __doPostBack('ctl00_ContentPlaceHolder1_upModulePower', 'jsPostback')
      • 說明:
        • ctl00_ContentPlaceHolder1_upModulePower:是加了母版頁後的產生的客戶端ID。
        • jsPostback:用來判斷是不是透過js控制觸發的回發。因為UpDatePanel中會有其它伺服器控制項解發的回發,所以用此參數加以區分。
    • 2) 在後台PageLoad中得到參數,並取資料。
      • 判斷是否為js觸發的回發
        if  (Request[ " __EVENTARGUMENT " ]  == " jsPostback " ) {      //此處呼叫相關後台方法     // … }   
  • 其它問題:
    • 但是在我們呼叫__doPostBack函數時,有些時候呼叫這個函數會出現"物件不存在"的腳本錯誤?
    • 那是因為Html裡面沒有__doPostBack函數體,一般在拖放那些有自動回傳功能的控制項時,當把他的autoPostback屬性設為True,在運作的時候系統會自動加入__doPostback函數體。當然最直接的方法就是增加一個LinkBut​​ton。在頁面中加如LinkBut​​ton ,頁面就會在頁面中載入POSTBACK所需的JS,然後把其Text屬性設為空,切記不要設Visible屬性,因為如果Visible=false,在翻譯成Html時,直接就忽略LinkBut​​ton的存在了

深入學習JS: __doPostBack函數

  • 在.NET中,所有的伺服器控制項提交到伺服器的時候,都會呼叫__doPostBack這個函數,所以靈活運用這個函數對於我們的幫助還是很大的.
  • 例如,在我們寫程式的時候常常會需要動態的產生一些控件,最簡單的方法就是透過一個字串,例如
  • string strButton = <input type =」button」 ID=”button1”>
    ,然後輸出到頁面,但是如果我們需要這個控制項來執行一些伺服器的功能,就比較困難了.這裡我們就可以用過例來借用__doPostBack
  • 既然要在伺服器端運行那麼,我們可以聲明一個不可見的LinkBut​​ton控件,那通常,我們希望一個控件不可見,通常都是把visible屬性設為false.但是在這裡我們把LinkBut​​ton的Text屬性設置為空,來是這個LinkBut​​ton不可見(為什麼要這麼設置,而不是直接設置visible屬性,我如何在下面寫一些動態碼,我們可以透過一個JavaScript函數來實現
  • function ExcuteOnServer()
    
           {
    
           //第一個參數是你希望提交到伺服器的控制項的ID號,第二個參數是事件參數
    
           __doPostBack('LinkBut​​tonID','');
    
           }
  • 接下去我們只需要在動態產生的這個Button控制項的onclick事件中寫上onclick=”JavaScript:ExcuteOnServer();“,這樣當我們點擊這個動態產生的客戶端控制項的時候,他便會執行LinkBut​​ton中的程式碼.
  • 這樣便實現了動態產生的客戶端控制項提交到伺服器端的功能.
  • 最後要說一下的就是為什麼希望LinkBut​​ton控制不可見的時候,不是透過visible屬性來完成的.因為當我們把visible屬性設定為false的時候,瀏覽器在解析的時候,根本不會把這個控制項放在頁面上,也就是說這個控制項是不存在的,所以我們在呼叫__doPostBack函數的時候,便會找不到控制項.
  • 這裡介紹一個常用的函數__doPostBack,這個函數如果如果是ASP.Net render出來的頁面就是自動產生這個函數,比如有帶autopostback屬性的控件,且其屬性為true的頁面,帶編輯列的datagrid頁面。
  • __doPostBack 是透過__EVENTTARGET,__EVENTARGUMENT兩個隱藏控制項傳送控制訊息到服務端的,__EVENTTARGET為要呼叫控制項的名稱,如果要呼叫的控制項是子控制項,用''$'或':'分割父控制項:子控制項,__EVENTARGUMENT是呼叫事件時的參數
  • 下面示範下如何呼叫後台事件:
    • 1.新建工程
    • 2.拖入一個服務端Button1,一個DropDownList1和一個客戶端Button
    • 3.設定DropDownList1的AutoPostBack屬性為True,Button1的Visible為False
    • 4.雙擊Button1,在事件裡寫下Response.Write(“hello:” );
    • 5.頁面的HTML裡找到客戶端Button,寫入onclick="__doPostBack('Button1','')"
    • 6.編譯,運行,點擊Button是不是出現了”Hello“
    • 7.查看原始碼,發現裡面多了下面行
  • <script language="javascript">
     
    <!--
     
        function __doPostBack(eventTarget, eventArgument) {
     
            var theform;
     
            if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) {
     
                   theform = document.forms["Form1"];
     
               }
     
            else {
     
                   theform = document.Form1;
     
               }
     
               theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
     
               theform.__EVENTARGUMENT.value = eventArgument;
     
               theform.submit();
     
           }
     
    // -->
     
    </script>
     
     
    <input type="hidden" value="" />
     
    <input type="hidden" value="" />

study/cs-webbrowser/20250318-001/index.txt · Last modified: 2025/03/18 13:17 (external edit)