2011-10-17 51 views
6

我有一个复选框,在aspx中默认设置为“false”。然后有一个函数确定它是真是假,问题是当页面上有一个文本框,并且这个文本框上有一个TextChange事件时,当我在文本框中键入一些内容,然后转到复选框在这个时候是可见的,我第一次点击整个页面回发和重置复选框未选中..然后我需要再次点击它,然后它坚持..我能做些什么来使它坚持在第一次点击?如果复选框通过回发被点击,则坚持

我可以使用一些JavaScript的这个或你觉得我的选择是什么?

protected void myTextbox_TextChanged(object sender, EventArgs e) 
    { 
     ShowCheckBox(true); 
    } 

    private void ShowCheckBox(bool ckVal) 
    { 
     myCheckBox.Visible = ckVal; 
    } 
+2

如果将复选框设置为在您的代码隐藏检查,这应该继续回传后检查,除非viewstate等有问题? – Curt

+0

您是否可能在代码隐藏中将'默认'选中的值设置为false? –

+0

是的,我在一个if和else sta但是我有一个断点,它永远不会通过该行 – user710502

回答

6

为什么不添加一个更新面板像这里面的文本框:

<asp:UpdatePanel runat="server" ID="test"> 
    <ContentTemplate> 
     <asp:TextBox ID="TEXTBOX" runat="server" Visible="true" AutoPostBack="true" 
      OnTextChanged="checkUser" >Page Name</asp:TextBox> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="TEXTBOX" EventName="TextChanged" /> 
    </Triggers> 
</asp:UpdatePanel> 
+0

Yeap所有我需要的是更新面板谢谢 – user710502

0

您没有发布整个代码,所以我只是猜测。尝试将文本框的AutoPostBack属性设置为false,并查看是否修复该问题。

如果不这样做,请发布您的代码或重现问题的完整示例代码。

4

如果我是你,我会写在客户端的一些clode显示复选框或隐藏, 书面方式吸在服务器端代码是不好的,需要额外的往返 你也可以使用一个UpdatePanel做

5

我最好的猜测是你的复选框初始化(什么设置为检查为false)在每个回发中运行。例如。改变这种

protected void Page_Load(object sender, EventArgs e) 
{ 
    myCheckBox.Checked = false; 
} 

这个

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
     myCheckBox.Checked = false; 
} 

但是,我们需要看到更多的代码才可以有效地帮助你。部分问题可能是当控件不可见时,ViewState不会持久化。如果您想要做的只是显示/隐藏它,请按照其他人的建议使用javascript。

下面是一个例子使用jQuery:

$(document).ready(function(){ 
    $("#myTextBox").change(function() { 
    $("#myCheckBox").show(); 
    }); 
}); 
3

复选框,如果.Visible = false不会呈现到客户端。所以当回发发生时,默认值“false”就是它的设置。

您可以随时呈现控件并通过CSS切换可见性,因此复选框始终是控件树的一部分,并且其ViewState被持久化。

style="display:none"style="display:inline"