2017-07-28 31 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函數幫助我解決了這個問題。 –