如果通过回发单击复选框,则保留

时间:2011-10-17 14:23:26

标签: c# asp.net webforms

我在aspx中有一个设置为“false”的复选框作为默认值。然后有一个函数来确定它是真还是假,问题是当在页面上有一个文本框,这个文本框上有一个TextChange事件,当我在文本框中键入内容然后转到复选框此时我可以看到第一次点击整页回发并重置复选框以取消选中..然后我需要再次点击它然后它坚持..我该怎么做才能让它坚持第一次点击?

我可以使用一些javascript,或者你认为我的选择是什么?

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

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

5 个答案:

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

答案 1 :(得分:5)

我最好的猜测是,每次回发都会运行您的复选框初始化(将Checked设置为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();
  });
});

答案 2 :(得分:4)

如果我是你,我会在客户端写一些clode来显示复选框或隐藏它, 在服务器端编写suck代码并不好,需要额外的往返 您也可以使用更新面板来执行此操作

答案 3 :(得分:3)

复选框,如果未向客户端呈现.Visible = false。因此,当回发发生时,默认值“false”就是它设置的内容。

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

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

答案 4 :(得分:0)

你没有发布整个代码所以我只是猜测。尝试将文本框的AutoPostBack属性设置为false,看看是否修复了它。

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