从代码后台中删除一个ASP.NET控件

8

当满足某个条件时,我需要从页面中删除一个控件(一个文本框)。这可以通过后端代码实现,还是需要使用JavaScript呢?

注意:我需要删除控件,而不是隐藏它...


1
只需通过 ID 从页面控件集合中将其移除即可。 - IrishChieftain
你的条件是在什么时候验证的?是在页面渲染之前/期间吗?如果不是,你确实需要使用JavaScript/DOM来完成这个操作而不需要重新加载页面。 - J.Hudler
@J.Hudler 这个条件是在页面加载期间评估的。 - davioooh
2
@davioooh:即使你提到你需要删除控件,而不是隐藏它;你知道当它在服务器端不可见时,在客户端根本没有呈现(它的HTML未生成)吗?因此,TextBox1.Visible=false意味着在客户端根本没有文本框。 - Tim Schmelter
5个回答

13

使用父ControlCollection上的Controls.RemoveControls.RemoveAt

例如,如果您想从页面的顶部删除所有文本框:

var allTextBoxes = Page.Controls.OfType<TextBox>().ToList();
foreach(TextBox txt in allTextBoxes)
    Page.Controls.Remove(txt);

(请注意,您需要添加using System.Linq以使用Enumerable.OfType

或者,如果您想删除具有给定ID的TextBox:

TextBox textBox1 = (TextBox)Page.FindControl("TextBox1"); // note that this doesn't work when you use MasterPages
if(textBox1 != null)
    Page.Controls.Remove(textBox1);

如果您只想隐藏它(并将其从客户端完全删除),您也可以使其不可见:
textBox1.Visible = false;

3

尽管您可以将其从控件集合中移除,但为什么不隐藏它呢?

yourTextBox.Visible = false;

这将防止它被包含在发送到浏览器的生成html中。

2
当你设置.Visible=false时,它将不会在页面上呈现。如果你从Controls集合中删除控件,请勿在DataBindInitLoadPreRenderUnload阶段执行此操作,否则会引发异常。
动态添加或删除控件可能会导致问题。

1

是的,您可以从页面的控件集合中删除它:

this.Controls.Remove(control);

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接