如果之前已经问过这个问题,我真的很抱歉,但我找不到它。
使用ASP.NET / C#Web应用程序。
我正在后面的代码中创建一个标签并将其添加到页面中(所有代码都在代码中编码,而不是在设计页面中)
现在我有一个复选框我希望更改标签的可见性,具体取决于复选框是选中(显示)还是不选中(隐藏)。
我尝试使用更新面板。但由于标签是在代码中生成的,因此每次有部分回发时都必须再次生成标签。我不希望这样。
有没有办法用javascript来避免回复?其他解决方案也很受欢迎。
非常感谢您的帮助
答案 0 :(得分: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 :(得分:3)
你走在正确的轨道上。您可以通过使用客户端脚本来避免使用UpdatePanel控件和AJAX调用的开销和复杂性。
您需要为网页上的复选框的onClick事件定义要触发的JavaScript函数:
<input type="checkbox" onclick="checkboxChanged(this);" />
我假设您要从代码隐藏处向页面添加ID为“lbl”的标签。确保将标签设置为Page类的受保护成员,以便您可以使用服务器标签从aspx页面访问它,以便在JavaScript中调用document.getElementById时检索正确的ID。这很重要。
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';
}
}
答案 2 :(得分: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
}
答案 3 :(得分:0)
为什么不想在每次回发时加载标签控件?使用ASP.NET,整个页面将加载EACH回发,并将视图状态重新加载到控件中。然后你可以在页面init事件每次创建标签控件,它的viewstate可见属性在这种情况下将保留在回发之间。