2017-07-28 14 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> 

問題は、ボタンのクリックイベントがトリガされるたびにこれらの2行が実行されることです。コードビハインドボタンが動作したときに、aspxに入り、その2行を実行します。関数が呼び出されたときにそれらを実行したいだけです。このメソッドはupdatePanelの内部にあります。私はupdatePanelからjavascript関数を取得しようとしましたが、同じことがまだ起こっています。

この現象を回避する方法はありますか?どうもありがとうございました。

+0

明確にするには、実行したくない行があります。これは、%Session ["waitList"] = "yes"です。 %> '; '? – mjwills

+0

さらに、 '{'より '{'}が多いのであなたのJSは無効です。 – mjwills

+0

私はmjwillsを知っていますが、私は追加しました}そして、はい、その行と前の行です。ありがとう。 –

答えて

1

問題を解決する前に、何が起こっているのか、ボタンを押すたびにその2つの行が実行される理由を明確に理解する必要があります。あなたは、事前レンダリング段階、インラインコード(あなたが話している2行)を実行しますと、HTMLは、その後、生成された直後ASP.net

のページライフサイクルについての最初のレビューthisドキュメント化する必要があります。

ボタンをクリックすると、ポストバックが送信され、ASP.netはページを再レンダリングするため、2行目が2回実行されます。

今、私はあなたがこのようにしたいものを達成できるとは思いません。私。あなたの2番目のコードブロック:

は、ページが読み込まれるたびにセッション状態の「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関数は、この問題を解決するのに役立ちました。 –