2013-05-02 60 views
0

我的項目在首頁上有一個「HUD」,列出正在切換課程計劃的學生。它通過對獨立的.ascx頁面執行AJAX調用來完成此操作,該頁面在C#中運行一些SQL語句並呈現HTML。然後它將其傳回到首頁以放入名爲「動態」的div中。下面是調用它的頭版代碼:ASP.NET和AJAX嵌入式HTML修改

function loadDynamic() { 
     var ControlName = "utilities/HUD.ascx"; 
     $.ajax({ 
      type: "POST", 
      url: "Default.aspx/Result", 
      data: "{controlName:'" + ControlName + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (response) { 
       $('#dynamic').html(response.d); 
      }, 
      failure: function (msg) { 
       $('#dynamic').html(msg); 
      } 
     }); 
    } 

這樣做是爲了便於多人工作在系統上,並能夠得到實時更新完成(還有另外一個腳本,重新調用loadDynamic()功能每10秒,但這與這個問題無關)。

但是,可能有不少學生試圖同時更改課程計劃,因此爲了節省頁面空間,我們決定嘗試添加「......和更多記錄「鏈接(一個帶有javascript調用的< a>標籤),它將激活另一個javascript函數來顯示所有學生的單獨列表,並且只有少數學生隱藏該列表(該javascript函數位於HUD.ascx頁面)。

<script type="text/javascript"> 
    function loadMorePending() { 
     this.document.getElementById(<% =pnlMorePending.ClientID %>).style.visibility = 'visible'; 
     this.document.getElementById(<% =pnlPending.ClientID %>).style.visibility = 'hidden'; 
} 
</script> 

現在,你有背景,這裏的問題:

上面顯示的第二個代碼塊包含兩個ASP引用:面板,其中包含列表,位於HUD.ascx頁面上。當有人點擊「......和更多」鏈接時,它應該簡單地隱藏一個asp:Panel並顯示另一個。但是,當它調用該函數時,會拋出「Microsoft JScript運行時錯誤:'ctl01_pnlMorePending'未定義」。經過進一步調查(在瀏覽器中查看HTML源代碼時),即使'dynamic'div使用HUD.ascx頁面中的數據填充時,它仍然是空的!

<div id="dynamic"></div> 

雖然這可以解釋爲什麼pnlMorePending找不到,它並沒有給我如何糾正這種任何線索。我應該如何引用頁面上不存在的內容?我試過用面板代替div,但它仍然不起作用。我認爲,問題在於腳本轉移到首頁的事實,但它不會在需要的HUD.ascx頁面上運行。有沒有辦法做到這一點,而沒有2個不同的HUD.ascx頁面和2個不同的「loadDynamic()」函數(當按下「...」和「more」按鈕時,第二個被調用並填充到'dynamic'div中) ?

對不起,如果有點難以遵循。第一次發佈和問題是相當深入的。

回答

0

你缺少報價:

this.document.getElementById('<% =pnlMorePending.ClientID %>').style.visibility = 'visible';