【问题标题】:ASP.NET CheckBoxes to Enable/Disable Textbox in code behindASP.NET CheckBoxes 在后面的代码中启用/禁用文本框
【发布时间】:2014-10-27 04:20:40
【问题描述】:

在我的标记 (Default.aspx) 中,我有一个简单的表格:

<asp:Table id="myAspTable" runat="server" />

我的代码在后面 (Default.aspx.cs),我有一个整数 (n),它可以是 1 到 100 之间的任何值:

int n = getValueOfN();

基于这个数字,我可以动态创建复选框和文本框并将它们添加到我的页面:

CheckBox[] checks = new CheckBox[n];
TextBox[] texts = new TextBox[n];

for (int i=0; i<n; i++)
{
    checks[i] = new CheckBox();
    texts[i] = new TextBox();

    tblrow = new TableRow();
    tblcell = new TableCell();
    tblcell.Controls.Add(checks[i]);
    tblcell.Controls.Add(texts[i]);
    tblrow.Controls.Add(tblcell);
    myAspTable.Controls.Add(tblrow);
}

我现在要添加以下功能:每个复选框我必须在检查/取消选中时启用或禁用TextBox I。如何在代码隐藏中做到 100%?

这是我尝试过的:

checks[i].AutoPostBack = true;
checks[i].CheckedChanged += new EventHandler(this.CheckToggleEnable);


public void CheckToggleEnable(object sender, EventArgs e)
{
    // Implementation here
}

但这不起作用,因为我无法在 CheckToggleEnable 函数中引用 Textbox i。另外,我希望在没有回发的情况下这样做。

【问题讨论】:

  • 请不要只求我们为您解决问题。向我们展示如何尝试自己解决问题,然后向我们确切地展示结果是什么,并告诉我们您为什么觉得它不起作用。请参阅“What Have You Tried?”了解您真正需要阅读的优秀文章。

标签: c# asp.net checkbox textbox code-behind


【解决方案1】:

在 ASP.Net 中,如果您动态地创建控件,则需要在将其发送回服务器时重新创建它。

基本上,n 在您的代码中不应该是动态的。否则,我们不知道需要在回发中重新创建多少控件。

一旦检查了 CheckBox,以下代码将检索同级 TextBox

<asp:Table ID="myAspTable" runat="server" />

protected void Page_Load(object sender, EventArgs e)
{
    int n = 3;

    for (int i = 0; i < n; i++)
    {
        var checkBox = new CheckBox();
        var textBox = new TextBox();

        var tblrow = new TableRow();
        var tblcell = new TableCell();
        tblcell.Controls.Add(checkBox);
        tblcell.Controls.Add(textBox);
        tblrow.Controls.Add(tblcell);
        myAspTable.Controls.Add(tblrow);

        checkBox.AutoPostBack = true;
        checkBox.CheckedChanged += CheckBox_CheckedChanged;
    }
}

protected void CheckBox_CheckedChanged(object sender, EventArgs e)
{
    var checkbox = sender as CheckBox;

    var textbox = checkbox.Parent.Controls.OfType<TextBox>()
        .Select(control => control)
        .FirstOrDefault();

    if (textbox != null)
    {
        string value = textbox.Text;
    }
}

【讨论】:

    【解决方案2】:

    在每个复选框集上:

    AutoPostBack="True"
    

    每次点击都会回传到服务器。您可以附加到 CheckChanged 事件,然后找到正确的文本框并设置:

    Enabled="True"
    Enabled="False"
    

    视情况而定。

    如果您有很多检查,我会建议您在客户端 JavaScript 中执行此操作,因为重复回发到服务器的性能...它可能会在服务器上密集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多