2017-07-28 26 views
1

在WebForms项目中,在特定页面上,我在aspx文件中有一个javascript方法。在里面我使用了2个嵌入式代码块。避免在ASP.NET中执行嵌入代码块

<script type="text/javascript"> 
    function showMessage(idActityGroup) { 
     var r = confirm("Message"); 
     if (r == true) { 
      //First Code Block 
      <%string idActityGroup = "' + idActityGroup + '"; 
      //Second Code Block 
      '<%Session["waitList"] = "yes"; %>'; 
      //Last javascript instruction 
      window.location.href = '/Register'; 
     } 
</script> 

问题是,每次触发按钮的单击事件时都会执行这两行。当代码隐藏按钮已经完成它的工作时,它将进入aspx并执行这两行代码。我只希望它们在函数被调用时运行。该方法在updatePanel中。我试图从updatePanel中获取javascript函数,但同样的事情仍在发生。

有什么办法可以避免这种行为?非常感谢你。

+0

要清楚,你不想执行的行是这一行 - ''<%Session [“waitList”] =“yes”; %>';'? – mjwills

+0

另外,你的JS是无效的,因为你有更多的''而不是''''。 – mjwills

+0

我知道mjwills,但确定我加了}而且是那一行和前一个。谢谢。 –

回答

1

在解决问题之前,您应该清楚发生了什么事以及每次按下按钮时执行这两行的原因。您应该首先查看this关于ASP.net中页面生命周期的文档

在预渲染阶段之后,内嵌代码(您正在讨论的2行)被执行,然后生成HTML。

当你点击一个按钮时,它会提交一个回发并且ASP.net会重新渲染该页面,因此你的两行将被第二次执行。

现在,我认为你不可能以这种方式实现你想要的。即您的第二个代码块:

<%Session["waitList"] = "yes"; %> 

每次页面加载时都会在会话状态中为“waitList”键分配“yes”。 你应该试着generate a postback来处理背后的代码。

<script type="text/javascript"> 
    function showMessage(idActityGroup) { 
     var r = confirm("Message"); 
     if (r == true) { 
      //First Code Block 
      __doPostBack('handleMessageConfirmed',null) 
     } 
</script> 
+0

非常感谢。正如你所提到的那样,不可能阻止嵌入式代码块执行,因为每次调用服务器时视图都被预渲染。 __doPostBack函数帮助我解决了这个问题。 –