stringbuilder无法正常工作

时间:2012-09-20 12:39:35

标签: asp.net checkbox stringbuilder

的.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 />

输出 - on checkedchanged //]]&gt;出现在页面顶部

1 个答案:

答案 0 :(得分: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>

因此,它可以在网络上呈现,但不会显示。因为我们将其显示设置为无。

如果您只想在复选框检查中显示它,则无需将其设置为服务器端。你可以用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();
      });
});

它将解决您的问题。

希望它会对你有所帮助。