0

.cs

protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
    {
        StringBuilder str = new StringBuilder();
        str.Append("<script language='javascript'>($('#phnoe').show();)</script>");
        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "chp", str.ToString(), true);
    }

.aspx

<asp:CheckBox ID="ch_p" Text="phone" runat="server" AutoPostBack="true"
        oncheckedchanged="CheckBox1_CheckedChanged"/>
</div><div id="p" style="float:left;"><asp:TextBox style="float: left;" runat="server" id="phnoe" Visible="false"></asp:TextBox></div></div><br />

output-oncheckedchanged//]]>がページの上部に表示されています

4

1 に答える 1

2

これを変更する必要があります

ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "chp", str.ToString(), true);

ScriptManager.RegisterStartupScript(this, this.GetType(), "chp", str.ToString(), false);

ScriptManager.RegisterStartupScript は、すべての Dom コンテンツがページにレンダリングされるときに、javascript コードを追加します。

文字列ビルダーでスクリプト タグを既に追加しているため、addScriptTag パラメータを true にする必要はありません。

しかし、aspx マークアップでは、テキスト ボックスを visible="false" にしました。

<asp:TextBox style="float: left;" runat="server" id="phnoe" Visible="false">
</asp:TextBox>

そのため、レンダリングされず、スクリプトで表示できません。

次のようにマークアップを変更する必要があります

<asp:TextBox style="float: left;" runat="server" id="phnoe" style="display:none;">
</asp:TextBox>

そのため、Web 上でレンダリングできますが、表示されません。表示を none に設定したためです。

また、チェックボックスのチェックで表示するだけの場合は、サーバー側にする必要はありません。jqueryで簡単にできます。

したがって、マークアップは

<div>
   <asp:CheckBox ID="ch_p" Text="phone" runat="server"  />
</div>
<div id="p" style="float:left;">
    <asp:TextBox style="float: left;" runat="server" id="phnoe" style="display:none">
    </asp:TextBox>
</div></div><br />

jqueryを使ったようなJavascriptコードを作る

$(function(){
      $('[ID$=ch_p]').on("click",function(){
           if(this.checked)
               $('[ID$=phnoe]').show();
           else 
               $('[ID$=phnoe]').hide();
      });
});

それはあなたの問題を解決します。

それがあなたを助けることを願っています。

于 2012-09-20T12:46:07.150 に答える