2011-10-13 4 views
3

この質問に以前に尋ねられても見つからない場合は本当に申し訳ありません。チェックボックスを使用してjavascriptでオブジェクトの可視性を変更しますか?

ASP.NET/C#Webアプリケーションでの作業。

私の背後にあるコードでラベルを作成し、それをページに追加してい(すべてのデザインページに背後ではなくコードでコード化された)

今、私はチェックボックスがあり、私はの可視性を変更したいですチェックボックスがチェック(表示)されているかどうかに応じてラベルが表示されます(表示されない場合)。

更新パネルを使用しようとしました。しかし、ラベルがコードで生成されているので、私は部分的なポストバックがあるたびにそれを再度生成する必要があります。私はそれを望んでいません。

ポストバックを避けるためにjavascriptでこれを行う方法はありますか?他のソリューションも高く評価されています。

ありがとうございました

答えて

3

あなたは正しい方向にあります。 UpdatePanelコントロールとAJAX呼び出しを使用する際のオーバーヘッドと複雑さを避けるために、クライアントサイドスクリプトを使用してこれを行うことができます。

あなたはあなたのウェブページ上のチェックボックスのonClickイベントのために発射するJavaScript関数を定義することをお勧めします:

<input type="checkbox" onclick="checkboxChanged(this);" /> 

私はあなたにID「LBL」とラベルを追加していると仮定しますあなたのコードビハインドからのページ。あなたはJavaScriptでdocument.getElementByIdを呼び出すときに正しいIDを取得するためにserverタグを使用してaspxページからアクセスできるように、ラベルをPageクラスのProtectedメンバーにしてください。これは重要。だからここ

Partial Class MyPage 
    Inherits System.Web.UI.Page 
    Protected lbl As Label 

    Private Sub Page_Load(sender As Object, e As EventArgs) 

    If Not Page.IsPostback Then 

     lbl = New Label() 
     lbl.ID = "lbl" 
     Me.Controls.Add(lbl) 

    End If 

    End Sub 

End Class 

は、あなたのaspxページ上のJavaScriptコードがどのように見えるかです:

function checkboxChanged(checkbox) { 
    if (checkbox.checked) { 
    document.getElementById("<%=Me.lbl.ClientID %>").style.display = 'inline'; 
    } else { 
    document.getElementById("<%=Me.lbl.ClientID %>").style.display = 'none'; 
    } 
} 
+0

ソリューションをありがとうございました。出来た。 – Youssef

5

このコードをページの読み込みに設定してください。

if (!Page.IsPostBack) { 
    Label lbl = new Label(); 
    lbl.ID = "lbl"; 
    lbl.Text = "Test"; 
    this.Controls.Add(lbl); 

jQuery javascriptへの参照を追加し、以下にHTMLとして配置してください。

<asp:CheckBox runat="server" ID="chk" /> 
<script language="javascript" type="text/javascript"> 
    $(document).ready(function() { 
     $("#chk").change(function() { 
      if (this.checked) 
       $("#lbl").hide(); 
      else 
       $("#lbl").show(); 
     }); 
    }); 
</script> 

ダイナミックコントロールを作成する必要がある場合は、AJAX(jQuery)を使用してください。

1
<asp:CheckBox ID="CheckBox1" onclick='$("span[id$=lblToHide]").toggle();' runat="server" Text="Bla" AutoPostBack="false" /> 

if (!Page.IsPostBack) { 
    Label lbl = new Label(); 
    lbl.ID = "lblToHide";  
    lbl.Text = "I am visible"; 
    lbl.Attributes.Add("style", "display:none"); //hide at first 
    this.Controls.Add(lbl); //or however you are adding it 
} 
0

なぜなら、すべてのポストバックにラベルコントロールを読み込みたいのですが? ASP.NETでは、ページ全体が各ポストバックで読み込まれ、ビューステートがコントロールに再ロードされます。その後、ページのinitイベントで毎回ラベルコントロールを作成することができ、この場合のviewstate可視プロパティはポストバックの間に保持されます。

関連する問題