javascript代码背后的价值观

时间:2012-07-09 08:47:50

标签: c# javascript asp.net code-behind

我有以下显示/隐藏按钮的JS代码(必须以这种方式完成,请不要以其他方式这样做)。

Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequestHandle);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandle);
function beginRequestHandle(sender, Args) {
                document.getElementById("ltInstructions").style.visibility = "hidden";
                document.getElementById("btnSubmit").style.visibility = "hidden";
                document.getElementById("btnToExcel").style.visibility = "hidden";
            }
function endRequestHandle(sender, Args) {
                    if(<%=resultsCount %> > 0)
                    {
                        document.getElementById("ltInstructions").style.visibility = "visible";
                        document.getElementById("btnSubmit").style.visibility = "visible";
                        document.getElementById("btnToExcel").style.visibility = "visible";
                    }
                    else
                    {
                        document.getElementById("results").innerHTML = "<br><b><center><font size=20>No results found, please try again.</b></font></center>";
                    }
                }

问题是<%=resultsCount %>在后​​面的代码中初始化为0,然后在Timer_Tick方法中更新。上面的Js总是把它当作0。

如何让JS把它作为正确的值?

2 个答案:

答案 0 :(得分:1)

使用asp:hiddenfield代替并在Timer_Tick中更改其值,您将获得更新的值。

在HTML中

 <asp:HiddenField id="resultsCount" runat="server" Value="String" />

在Javascript中

resultsCount = document.getElementById('<%= resultsCount.ClientID %>').value;

答案 1 :(得分:0)

尝试在浏览器中查看网页的来源。您必须在JavaScript中编写计时器,因为<%=resultsCount %>只评估一次,因此,所有客户看到的都是

 if (0 > 0) {
   ...
 }

您可以使用setIntervalclearInterval方法在JavaScript中实现计时器。定义一个函数update(),只要需要更新某些内容就应该调用它,然后执行

var updateInterval

function update() {
  if(condition) {
    /* update stuff */
  } else {
    /* no more updates needed */
    clearInterval(updateInterval) /* stop updating */
  }
}

updateInterval = setInterval(update, 1000) /* call update() every 1000 ms, that is every second */