避免在ASP.NET中执行嵌入式代码块

时间:2017-07-28 13:08:00

标签: javascript c# asp.net

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

<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函数,但同样的事情仍在发生。

有没有办法避免这种行为?非常感谢你。

1 个答案:

答案 0 :(得分:1)

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

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

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

现在,我不认为你可以通过这种方式达到你想要的目标。即你的第二个代码块:

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

会指定&#34;是&#34;到了#wait;&#39;每次页面加载时键入会话状态。 您应该尝试generate a postback来处理后面的代码。

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