2017-01-17 9 views
0

aspパネルの表示に関する奇妙な問題に直面しています。私はdivを可視にするパネルの中にボタンを含む小さなフォームを持っています。クライアント側のaspパネルの表示を設定していないと、リンク上に再度表示されます。

function ShowModal() { 
    $('#myModal').show(); 
} 

function CloseMyDiv() { 
      var modal = document.getElementById('myModal'); // this is my div 
      var pnlHasPriorApproval = document.getElementById('<%= pnlHasPriorApproval.ClientID %>'); // this is my pannel 
pnlHasPriorApproval.style.display = "none"; // hiding pannel 
modal.style.display = "none"; // hiding div 
} 

プロセスは次のとおりです:

<div id="myModal" class="modal" style="display: none"> 
<span onclick="CloseMyDiv();" id="closeSpan" class="close">×</span> 
    <!-- Modal content --> 
</div> 

<asp:Panel ID="pnlHasPriorApproval" runat="server" Style="display: none"> 
    <input onclick="ShowModal();" type="button" value="Extract" runat="server" /> 
</asp:Panel> 

は以下のjavascript機能であり、私はdiv要素が示され、このボタンをクリックするたびに、私は近くをクリックしたときに、div要素とパネルの両方を非表示にする必要があります。 ..これは完全に動作しています。しかし、それをクリックするたびに別のボタンが表示され、パネルは非表示のままで表示されます。

このボタンは、サーバ側での関数によって処理されます

Protected Sub lnkBtnphyCode_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkBtnphyCode.Click 
.... 
End Sub 

私はどちらもこの機能では、私のパネルの可視性を変更されていないサーバ側では何もないことを確信していますロードページイベントで発生します。とにかく、別の場所で使用されていないことを確認するために、新しいID「testDiv」を使用してdiv内にパネルを実装しました。同じプロセス(このdivをonclickで非表示にするプロセス)を実行しました。私はlnkBtnphyCodeをクリックします。代わりに、ディスプレイを使用しての隠された...しかし、私は同じ問題

  • 私はlnkBtnphyCode_Click方法でDim v = Me.pnlHasPriorApproval.Visibleを追加したがあった:

    1. 私は可視性を設定することで、同じプロセスを試してみました:

      ソリューションを試してみましたあなたが最初に見ることができるように、私はすでにそれを隠してしまったので、vは奇妙です。

    2. いつも非表示にして表示されないようにする唯一の方法は、サーバーサイドの可視性を変更することです。なぜそれがjavascript(クライアント)から常に隠されているのか理解できません。

    私の質問は、どうすればJavascriptを常に非表示にすることができますか?

  • +0

    これは奇妙な問題ではありません。サーバーは可視性を変更したことを知らないので、ページが(再)ロードされるとパネルが表示されます。いずれかのサーバー側の 'Visible'を使用し、' asp:HiddenField'に状態を保存し、すべてのページの読み込みをチェックするか、 'UpdatePanel'を使用してください – VDWWD

    +0

    そしてなぜ他のdivも隠れているのですか? –

    答えて

    0

    JavaScriptコードはクライアント側で実行され、ASP.Netはサーバー側で実行されます。 JSコードがサーバーと現在の状態情報を共有しない限り、ASP.NetコードはJSコードによって行われた変更を認識しません。

    ボタンをクリックすると、フォームデータのみがサーバーに送信されます。したがって、divとパネルが現在非表示になっているという情報は渡されません(これは正常な動作です)。サーバーに渡す場合は、隠しフォームフィールドを使用してこの情報を明示的に送信する必要があります。あなたは何ができるか

    は次のとおりです。

    1. は、ページ上の隠しコントロールを作成し、isPanelVisibleを言います。
    2. div/panelを非表示にするときは、JSコードを使用して隠しコントロール内にtrueを設定します。
    3. サーバーサイドのコードでPage_Loadにあるこの隠しコントロールの値を確認し、パネルの表示を設定します。

    これは、このようなケースを処理する典型的な方法です。

    +0

    ありがとうございました –

    関連する問題