2013-05-02 54 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';