2012-11-10 25 views
3

我有一個帶有多個用戶控件的aspx頁面。 頁是這樣的,如何在每個用戶控件的一個aspx頁面上使用javascript pageLoad()事件?

<asp:Content ID="Content2" ContentPlaceHolderID="chpMainBody" runat="server"> 

      <en:ProfileInfo ID="ucProfileInfo" runat="server" /> 

      <br /> 
      <en:WorkingExperienceInfo ID="ucWorkingExperienceInfo" runat="server" /> 
      <br /> 
       <en:TechnicalInfo ID="ucTechnicalInfo" runat="server" /> 

    <br /> 
      <en:EducationInfo ID="ucEducationInfo" runat="server" /> 
</asp:Content> 

我與樹視圖dropdownextender每個用戶控制使用此腳本,這是「ucEducationInfo」用戶控件

<script type="text/javascript"> 
    var DDE4; 
    var DDE5; 
    function pageLoad() { 
     DDE4 = $find('<%= dde_CountryUniversity.ClientID %>'); 
     DDE5 = $find('<%= dde_UniversityMajors.ClientID %>'); 


     DDE4._dropWrapperHoverBehavior_onhover(); 
     DDE5._dropWrapperHoverBehavior_onhover(); 

     $get('<%= pnl_CountryUniversity.ClientID %>').style.width = $get('<%= txt_CountryUniversity.ClientID %>').clientWidth; 
     $get('<%= pnl_UniversityMajors.ClientID %>').style.width = $get('<%= txt_UniversityMajors.ClientID %>').clientWidth; 


     if (DDE4._dropDownControl) { 
      $common.removeHandlers(DDE4._dropDownControl, DDE4._dropDownControl$delegates); 
     } 
     if (DDE5._dropDownControl) { 
      $common.removeHandlers(DDE5._dropDownControl, DDE5._dropDownControl$delegates); 
     } 



     DDE4._dropDownControl$delegates = { 
      click: Function.createDelegate(DDE4, ShowMe), 
      contextmenu: Function.createDelegate(DDE4, DDE4._dropDownControl_oncontextmenu) 
     } 
     DDE5._dropDownControl$delegates = { 
      click: Function.createDelegate(DDE5, ShowMe), 
      contextmenu: Function.createDelegate(DDE5, DDE5._dropDownControl_oncontextmenu) 
     } 


     $addHandlers(DDE4._dropDownControl, DDE4._dropDownControl$delegates); 
     $addHandlers(DDE5._dropDownControl, DDE5._dropDownControl$delegates); 
    } 

    function ShowMe() { 
     DDE4._wasClicked = true; 
     DDE5._wasClicked = true; 
    } 

但我注意到素文字只能「ucEducationInfo」usercontrol。我嘗試改變usercontrol的行,我認爲這是因爲用戶控制在頁面的末尾。我對JavaScript不太好。哪裏不對?

回答

1

既然你標記了AJAX,你可以試試這裏的信息。

http://www.asp.net/ajax/documentation/live/overview/AJAXClientEvents.aspx

與您的代碼的問題是,當用戶控件呈現eqch一個可以覆蓋最後負載。您需要添加一個處理程序,如上面的鏈接,並且可能檢查,以便它們不會在異步回傳中添加兩次,具體取決於您使用ajax的位置。

+0

好吧,我添加了腳本的頂部,它已經解決了Sys.Application.add_load(myEducationFunction); Sys.Application.add_load(ShowMe); var DDE4; var DDE5; 函數myEducationFunction()................ – tessa

+0

非常感謝你 – tessa

0

隔離函數使變量被本地化並且不衝突。試試這個:

<script type="text/javascript"> 
(function() { 
    var DDE4; 
    var DDE5; 
    function pageLoad() { 
     DDE4 = $find('<%= dde_CountryUniversity.ClientID %>'); 
     DDE5 = $find('<%= dde_UniversityMajors.ClientID %>'); 


     DDE4._dropWrapperHoverBehavior_onhover(); 
     DDE5._dropWrapperHoverBehavior_onhover(); 

     $get('<%= pnl_CountryUniversity.ClientID %>').style.width = $get('<%= txt_CountryUniversity.ClientID %>').clientWidth; 
     $get('<%= pnl_UniversityMajors.ClientID %>').style.width = $get('<%= txt_UniversityMajors.ClientID %>').clientWidth; 


     if (DDE4._dropDownControl) { 
      $common.removeHandlers(DDE4._dropDownControl, DDE4._dropDownControl$delegates); 
     } 
     if (DDE5._dropDownControl) { 
      $common.removeHandlers(DDE5._dropDownControl, DDE5._dropDownControl$delegates); 
     } 



     DDE4._dropDownControl$delegates = { 
      click: Function.createDelegate(DDE4, ShowMe), 
      contextmenu: Function.createDelegate(DDE4, DDE4._dropDownControl_oncontextmenu) 
     } 
     DDE5._dropDownControl$delegates = { 
      click: Function.createDelegate(DDE5, ShowMe), 
      contextmenu: Function.createDelegate(DDE5, DDE5._dropDownControl_oncontextmenu) 
     } 


     $addHandlers(DDE4._dropDownControl, DDE4._dropDownControl$delegates); 
     $addHandlers(DDE5._dropDownControl, DDE5._dropDownControl$delegates); 
    } 

    function ShowMe() { 
     DDE4._wasClicked = true; 
     DDE5._wasClicked = true; 
    } 
})(); 
</script> 

此外,如果你這樣做,你就需要從功能塊內或在其添加一個現成的聽衆打電話的Page_Load。

+0

頁面加載是由ASP調用一個特殊的函數。網絡AJAX。它需要在範圍內? –

+0

你可以手動調用它嗎?對不起,我不使用AJAX.NET,但假設它只需要在document.ready上調用,您可以使用jQuery調用它,也可以使用純Javascript添加事件。但是要專門回答你的問題,在我的回答中,page_Load不能在該功能塊之外被調用。 –

2

定製ajax控件應該是我認爲最好的決定。但是,由於你沒有經歷過JavaScript,所以對你來說這是相當複雜的任務。嘗試用下面的腳本來替換頁面加載功能在用戶控件:

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function() { 

    // code from pageLoad method here 

    window.showControl = window.showControl || {}; 

    window.showControl["<%= this.ClientID %>"] = function() { 
     DDE4._wasClicked = true; 
     DDE5._wasClicked = true; 
    }; 
}); 

這裏是從頁例如使用showControl功能爲ucEducationInfo控制:

showControl["<%= ucEducationInfo.ClientID %>"](); 
+0

我試過這個,但也許我不能用我的代碼實現。它不起作用。但是謝謝你 – tessa

相關問題