2014-09-02 107 views
1

在我的标记(Default.aspx的),我有一个简单的表:ASP.NET复选框代码启用/禁用文本框后面

<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); 
} 

我现在想要添加以下功能:每个复选框,我必须启用或禁用文本框我,当分别选中/取消选中。我如何在代码隐藏方面100%做到这一点?

这是我曾尝试:

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


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

但是,这并不工作,因为我没有在CheckToggleEnable功能指引文本框我的方式。另外,我希望在没有后卫的情况下做到这一点。

+0

请不要只问我们为你解决问题。告诉我们你是如何试图自己解决问题的,然后向我们展示结果是什么,并告诉我们为什么你觉得它不起作用。请参阅“[您尝试过什么?](http://whathaveyoutried.com/)”,以获得一篇您最近需要阅读的优秀文章。 – 2014-09-02 19:51:18

回答

2

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

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

下面的代码将检索兄弟文本框一次复选框检查。

<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; 
    } 
} 
1

在每个复选框组:

AutoPostBack="True" 

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

Enabled="True" 
Enabled="False" 

取决于条件。

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