天道酬勤,学无止境

从代码隐藏中删除 asp.net 控件(Remove an asp.net control from code-behind)

问题

当某个条件得到验证时,我需要从我的页面中删除一个控件(一个文本框)。 是否可以从代码隐藏中执行,或者我需要使用 JavaScript。

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

回答1

在父ControlCollection上使用 Controls.Remove 或 Controls.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;
回答2

虽然您可以将其从控件集合中删除,但为什么不将其隐藏呢?

yourTextBox.Visible = false;

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

回答3

当您设置.Visible=false ,它将永远不会在页面中呈现。 如果您从 Controls 集合中删除控件,请不要在DataBindInitLoadPreRenderUnload阶段执行此操作,因为它会引发异常。

动态添加或删除控件可能会导致问题。

回答4

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

this.Controls.Remove(control);
回答5

您可以尝试使用此代码 - 基于Remove method

this.Controls.Remove(YourControl);

链接:http://msdn.microsoft.com/en-US/library/system.web.ui.controlcollection.remove(v=vs.80).aspx

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • ASP.NET 控件无法在 Visual Studio 2008 的代码隐藏中引用(ASP.NET controls cannot be referenced in code-behind in Visual Studio 2008)
    问题 好的,所以,我的视觉工作室坏了。 我说这不是过早的,因为这是我第一次看到我的代码哪里搞砸了。 当我向页面添加控件时,我无法在后面的代码中引用所有控件。 其中一些我可以,似乎我放在页面上的前几个工作,然后它就停止了。 我首先认为它可能是控件类型,因为最初我试图在更新面板中引用中继器。 我知道我正确地引用了我的 aspx 页面中的代码。 但是为了以防万一我搞砸了,我开始从头开始重新创建页面,这次在 VS 停止识别我的控件之前又放下了一些控件。 在创建我的页面两次并卡住后,我想也许它仍然是控件的类型。 我创建了一个新页面,然后在上面贴了一些标签。 没有骰子,从后面的代码中引用控件时构建失败。 在一个可能不相关的注释中,当我切换到 aspx 页面的可怕“设计”模式时,VS 2008 出错并重新启动。 我已经向 Microsoft 提交了故障单。 我卸载了所有加载项,然后重新安装了 Visual Studio。 任何想要查看我的代码的人都可以询问,但我使用的是直接所见即所得的视觉工作室“新的 aspx 页面”,没什么特别的。 我怀疑有人遇到过这种情况,但是你遇到过吗? 有没有人在使用 Microsoft 解决这些问题时遇到过成功? 有什么办法不用付钱就能加快这张票吗??? 几天来我一直在与微软的代表交谈,但没有运气,我已经死在水中了。 Jon Limjap
  • 在 asp.net 中隐藏 gridView 行(Hide a gridView row in asp.net)
    问题 我正在创建一个gridView ,它允许通过将插入所需的控件添加到FooterTemplate中来添加新行,但是当ObjectDataSource没有记录时,我添加了一个虚拟行,因为FooterTemplate仅在有数据时才显示。 我怎样才能隐藏这个虚拟行? 我试过在RowDataBound上设置e.row.visible = false但该行仍然可见。 回答1 您可以处理 gridview 的数据绑定事件并隐藏虚拟行。 (不要忘记在 aspx 代码中分配事件属性): protected void GridView1_DataBound(object sender, EventArgs e) { if (GridView1.Rows.Count == 1) GridView1.Rows[0].Visible = false; } 回答2 请尝试以下操作 protected void GridView1_DataBound(object sender, EventArgs e) { GridView1.Rows[0].Visible = false; } 回答3 我认为这就是你需要的: <asp:GridView ID="grid" runat="server" AutoGenerateColumns="false" ShowFooter="true"
  • 如何通过Javascript函数设置ASP.NET控件的“可见”属性?(How do you set the “Visible” property of a ASP.NET control from a Javascript function?)
    问题 我基本上想知道从Javascript函数隐藏/显示ASP.NET控件的最佳方法。 我想我只需要使用以下方式访问Javascript中的控件: var theControl = document.getElementById("txtEditBox"); 然后只需将控件的Visible属性设置为true / false。 它似乎不起作用,我似乎无法弄清楚如何将“可见”设置为true / false。 我怎样才能做到这一点? 另外,这是从Javascript函数隐藏/显示ASP.NET控件的最佳方法吗? 谢谢杰夫 回答1 ASP.NET控件的“可见”属性确定是否将其呈现在客户端上(即发送到客户端)。 如果呈现页面时为false,则它将永远不会到达客户端。 因此,从技术上讲,您不能设置控件的该属性。 就是说,如果控件是在客户端上呈现的,因为呈现页面时Visible属性为true,则可以使用如下的javascript将其隐藏: var theControl = document.getElementById("txtEditBox"); theControl.style.display = "none"; // to show it again: theControl.style.display = ""; 假定控件的id属性在客户端上确实是“ txtEditBox”,并且已经可见。
  • 无效的回发或回调参数。 使用“”启用事件验证 '(Invalid postback or callback argument. Event validation is enabled using '<pages enableEventValidation=“true”/>')
    问题 当我从客户端发回页面时,出现以下错误。 我有在客户端修改asp:ListBox的JavaScript代码。 我们该如何解决? 错误详情如下: Server Error in '/XXX' Application. -------------------------------------------------------------------------------- Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager
  • 出现在我的文本框asp.net中的modalpopupextender和逗号(modalpopupextender and commas appearing in my textbox asp.net)
    问题 发生了一些奇怪的事情,我正在转换一个用于使用javascript的应用程序,以便在一个很小的窗口中打开另一个网页,以便使用ModalPopupExtender进行数据输入。 似乎工作正常,但是在OK事件中,当我执行txtData.Text(模式弹出窗口中的文本框)时,它在数据前返回一个逗号,因此,如果您键入“ Rabbit”,则返回为“ ,兔子”。 同样,当我多次使用它时,在另一个我可能单击以显示它的地方,然后键入“ Fish”,它开始返回诸如“,Rabbit ,, Fish”之类的内容。 我不知道为什么或如何阻止它执行此操作...有什么想法吗? 回答1 由于某种原因,如果文本框设置为ReadOnly,则似乎不会发生。 我在想可能有一种解决方法,即向用户显示可编辑的文本框,捕获其击键,并更新对用户隐藏的只读文本框。 仍然有些混乱,但是我无法回退到May的发行版,因为该发行版中还有一个ComboBox的错误需要避免! 更新: 作为背景知识,我在模式弹出窗口中有一个用户控件(ascx),因为我需要重用它。 ascx必须自己处理用户的输入(包含页面不知道控件内部发生了什么),因此当用户单击按钮时,我会进行回调并处理数据。 如果成功的结果返回给客户端回调函数,那么我将模拟单击包含页面认为是“ OK”按钮的按钮,该按钮实际上对用户是不可见的。 我已经更改了代码
  • jQuery DIalog和ASP.NET中继器(JQuery DIalog and ASP.NET Repeater)
    问题 我有一个ASP.NET中继器,其中显示带有删除LinkBut​​ton的项目列表。 我想设置Delete LinkBut​​tons以显示一个JQuery对话框进行确认。 如果单击“确定”按钮,我要回发。 明显的问题是,转发器中的每个LinkBut​​ton都有其自己的ID,并且我不想为对话框复制所有JavaScript。 建议? 回答1 解决方法不是那么简单。 在按下jQuery UI对话框的“确定”按钮后,您必须具有调用原始回调函数的功能。 首先,您需要一个通用的js函数来显示对话框: function showConfirmRequest(callBackFunction, title, content) { $("#divConfirm").html(content).dialog({ autoOpen: true, modal: true, title: title, draggable: true, resizable: false, close: function(event, ui) { $(this).dialog("destroy"); }, buttons: { 'Ok': function() { callBackFunction(); }, 'Cancel': function() { $(this).dialog("destroy"); } }
  • 呈现时如何从WebControl中删除span标签(How to remove span tag from WebControl when rendered)
    问题 当使用ASP.NET CheckBox (在CheckBox情况下,继承自CheckBox )时,它会在复选框输入控件周围呈现一个范围,该范围控件会影响jQuery脚本。 渲染时是否可以删除该跨度? 回答1 找到了这个有用的提示: 在“隐藏代码”中,使用InputAttributes而不是Attributes。 例如,键入: chk.InputAttributes.Add("onchange", "updateFields()") 而不是这样: chk.Attributes.Add("onchange", "updateFields()") 或代替内联声明: <asp:CheckBox ID="chk" runat="server" onchange="updateFields()" /> 最后两个将导致换行跨度。 回答2 我只是在测试页上尝试过此操作,但我没有绕过CheckBox控件...您确定呈现此功能的是CheckBox吗? 有条件吗? 更新:好的,这似乎取决于CheckBox是否具有额外的属性,包括CssClass设置...或“禁用”属性。 回答3 我不知道这是否适用于此特定示例。 但是,如果您制作自己的WebControl,并且您不希望它呈现自身的跨度,则可以覆盖Controls呈现方法,如下所示: public class MyWebControl
  • 如何从asp.net中动态生成的复选框列表中获取复选框值(How to get the checkbox value from a dynamically generated checkbox list in asp.net)
    问题 在Web表单中,我动态创建了一系列的chekbox,并将其添加到asp:placeholder //Generates the List of Entities that may be shared protected void GenerateEntityList(string agencyId, string agencyName) { var selectedAgency = UserFactory.GetAgencyAndSharedDataById(Convert.ToInt64(agencyId)); entityContainer.Controls.Clear(); //builds the entity list based upon entities in DB var currentEntities = UserFactory.GetEntityList(); //add checkboxes entityContainer.Controls.Add(new LiteralControl("<input type='checkbox' id='selectAllCB' value='All'>Select All<br/><br/>")); foreach (var item in currentEntities) { CheckBox
  • 如何从ASP.NET中的代码隐藏文件访问IFRAME?(How can I access an IFRAME from the codebehind file in ASP.NET?)
    问题 我正在尝试从代码隐藏的aspx.cs文件中为IFRAME html控件设置属性。 我碰到过一篇帖子,说您可以使用FindControl使用以下命令查找非ASP控件: aspx文件包含: <iframe id="contentPanel1" runat="server" /> 然后代码隐藏文件包含: protected void Page_Load(object sender, EventArgs e) { HtmlControl contentPanel1 = (HtmlControl)this.FindControl("contentPanel1"); if (contentPanel1 != null) contentPanel1.Attributes["src"] = "http://www.stackoverflow.com"; } 除了找不到控件之外,contentPanel1为null。 更新1 查看呈现的html: <iframe id="ctl00_ContentPlaceHolder1_contentPanel1"></iframe> 我试图将后面的代码更改为: HtmlControl contentPanel1 = (HtmlControl)this.FindControl("ctl00_ContentPlaceHolder1_contentPanel1"
  • 如何从服务器控件中删除“名称”属性?(how to remove 'name' attribute from server controls?)
    问题 下面的asp.net控件的边代码: <asp:TextBox runat="server" ID="LimitTextBox" Text="20" ClientIDMode="Static" /> 生成这样的HTML代码: <input name="ctl11$ctl00$ctl02$TeamPlayerSelector$LimitTextBox" type="text" value="20" id="LimitTextBox"> ID属性-根据需要,但是如何删除“名称”属性? 对我来说,它不是必需的,而且太长了,无法将其传输到用户浏览器。 如何防止“名称”属性生成? 谢谢 PS我在ASP.NET 4.0下工作 回答1 创建一个Filter(继承自Stream类),将其分配给您的HttpContext.Response.Filter属性,并在其中覆盖Write方法,以从生成的html中删除所有名称标签:) 有关更多信息,请参见此页面http://msdn.microsoft.com/zh-cn/library/system.web.httpresponse.filter.aspx 更新 查看TextBox的源代码,它会发现Name实际上是在渲染过程中添加到Attributes -list的,因此应该有可能干扰TextBox类的渲染并防止添加此属性。 这应该做 public
  • 如何使用jQuery在ASP.Net CheckBoxList控件中隐藏复选框周围的边框?(How do I hide the borders around checkboxes in an ASP.Net CheckBoxList control with jQuery?)
    问题 我需要摆脱由CheckBox控件呈现的各个复选框周围的边界。 这是现在的样子: ASP.Net标记很简单: <asp:CheckBoxList ID="cblEthnicity" runat="server" RepeatDirection="Vertical" RepeatColumns="3" RepeatLayout="Table" BorderStyle="None" BorderWidth="0"> </asp:CheckBoxList> 它位于应用了formTable类的表的单元格中(请参见下文)。 如您所见,我尝试将属性BorderStyle="None"和BorderWidth="0"为无效。 我很确定这是后面的CSS,它在要保存的封闭表格单元格周围放置了圆角边框: .formTable { background-color: #eeeeee; border: solid 1px #bbbbbb; -moz-border-radius: 7px; -webkit-border-radius: 7px; border-radius: 7px; } .formTable tr, .formTable tr td, .formTable tr th { background-color: #eeeeee; padding: 3px; border: solid
  • 动态创建的控件在回发后丢失数据(Dynamically Created Controls losing data after postback)
    问题 实际上,我是在Pageload上创建1个TextBox并将该TextBox添加到Panel 。 现在,我有一个类似Add Another的LinkButton 。 我在该TextBox输入Text,如果需要,我需要通过单击Add Another LinkButton来创建New TextBox 。 实际上,我能够获得计数并重新创建TextBoxes 。 但是问题是,先前生成的Textboxes我输入的文本”丢失了。 有人可以建议我解决这个问题吗? protected void Page_Load(object sender, EventArgs e) { try { if (!IsPostBack) { for (int i = 0; i < 5; i++) { TableRow row = new TableRow(); for (int j = 0; j < 5; j++) { TableCell cell = new TableCell(); TextBox tb = new TextBox(); tb.ID = "TextBoxRow_" + i + "Col_" + j; cell.Controls.Add(tb); row.Cells.Add(cell); } Table1.Rows.Add(row); } } } catch (Exception ex) {
  • 如何在ASP.NET中按类而不是ID选择元素?(How to select an element by Class instead of ID in ASP.NET?)
    问题 我在aspx页面上有一些分散的<p>元素,我正在使用类似的类将它们分组在一起- <p class="instructions" runat="server"> 在我后面的代码中,我想使用C#来隐藏这些元素,例如使用instructions.Visible = false; 但是我意识到如果我使用ID,我只能在代码隐藏中执行此操作,但这将导致无效的HTML / CSS选择器,因为您不能使用相同的ID名称使用多个ID ... 另外,如果不是按类分类,还有另一种方法可以对控件进行分组吗? 编辑:我不能使用JavaScript,所以选择必须在C#codebehind / ASP.NET中完成 回答1 除了将所有控件分组在单个容器控件中之外,没有简单的方法来找到在ASP.NET服务器端代码中具有某些属性的一组控件。 在客户端,您可以使用类似jQuery的东西来查找这些元素并将其隐藏: $(".instructions").hide(); 当页面完全加载时,我可能会这样做: $(document).ready(function() { $(".instructions").hide(); }); 在Javascript中隐藏元素的一个缺点是,如果有足够的数据,则可能需要一秒钟的时间,从而导致内容闪烁。 另一个区别是客户端隐藏内容不会将其从DOM中删除-内容只是被隐藏了。
  • ASP.NET的隐藏功能(Hidden Features of ASP.NET [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 9年前关闭。 已锁定。 该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。 它目前不接受新的答案或互动。 存在此问题是因为它具有历史意义,但是对于本站点而言,它不是一个很好的主题问题,因此,请勿将其用作您可以在此处提出类似问题的证据。 更多信息:https://stackoverflow.com/faq 在边缘场景中总会有一些有用的功能,但是由于这个原因,大多数人都不了解它们。 我要的是教科书通常不教授的功能。 你知道些什么? 回答1 在测试期间,您可以将电子邮件发送到计算机上的文件夹而不是SMTP服务器。 将其放在您的web.config中: <system.net> <mailSettings> <smtp deliveryMethod="SpecifiedPickupDirectory"> <specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\" /> </smtp> </mailSettings> </system.net> 回答2
  • ASP.Net MS图表控件饼图:删除不需要的填充(ASP.Net MS Chart Control Pie Chart: remove unwanted padding)
    问题 你好 我试图使用MS Chart控件创建简单的饼图。 当我的饼图在浏览器中呈现时,我会在饼图周围填充一些我无法摆脱的饼图。 我希望饼图靠着图像的边缘坐着,没有填充或边距。 关于如何实现这一目标的任何想法? 在我的代码下面,填充用蓝色突出显示。 即Chart1.BackColor = System.Drawing.Color.Blue; <script type="text/C#" runat="server"> protected void Page_Load(object sender, EventArgs e) { //Set the chart type Chart1.Series["Series1"].ChartType = SeriesChartType.Pie; //add points Chart1.Series["Series1"].Points.AddY(12); Chart1.Series["Series1"].Points.AddY(45); Chart1.Series["Series1"].Points.AddY(67); //set back color of chart object Chart1.BackColor = System.Drawing.Color.Blue; //set back color of chart area Chart1
  • 如何在ASP.Net WebControl的“内容”内部属性​​中包含其他标记?(How can I include additional markup within a 'Content' inner property of an ASP.Net WebControl?)
    问题 我已经搜索了该站点,但找不到适合我的问题的解决方案,因此,如果已经回答了该问题,我深表歉意(我敢肯定有人一定曾经问过这个问题)。 我已经编写了一个jQuery Popup窗口,并将其打包为WebControl和IScriptControl。 最后一步是能够在我的控件的标记中写入标记。 我已经使用了InnerProperty属性几次,但仅用于包含强类型类的列表。 这是我在WebControl上的属性: [PersistenceMode(PersistenceMode.InnerProperty)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public something??? Content { get { if (_content == null) { _content = new something???(); } return _content; } } private something??? _content; 这是我所追求的HTML标记: <ctr:WebPopup runat="server" ID="win_Test" Hidden="false" Width="100px" Height="100px" Modal="true"
  • 从代码背后添加asp:Button(Add asp:Button from codebehind)
    问题 我在代码隐藏中构建一个。 该表是数据库记录的列表(每行一个记录),我需要为每行添加一个删除按钮。 为此,我当然需要构建一个具有唯一ID的按钮。 为此,我想出了以下方法……这是行不通的。 有关如何使其正常工作的任何提示? Button deleteButton = new Button(); deleteButton.ID = "deleteStudentWithID" + singleStudent.ID.ToString(); deleteButton.Text = "X"; string row = "<tr>"; row += "<td class=\"style5\">"+deleteButton.ClientID +"</td>"; row += "</tr>"; 回答1 您的问题是您只将控件的ClientID添加到html中,而没有将控件添加到页面本身中。 Controls.Add(new LiteralControl("<table>")); foreach(var singleStudent in students) { Controls.Add(new LiteralControl("<tr>")); //Code to add other columns Button deleteButton = new Button(); deleteButton.ID
  • 使用codebehind显示hide div(Show hide div using codebehind)
    问题 我有一个DropDownList ,我正在尝试显示一个div OnSelectedIndexChanged但它说有“ OBJECT REQUIRED 。 我在那个div中绑定DataList : aspx : <asp:DropDownList runat="server" ID="lstFilePrefix1" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" > <asp:ListItem Text="Prefix1" Value="Prefix1" /> <asp:ListItem Text="Prefix2" Value="Prefix2" /> <asp:ListItem Text="Prefix3" Value="Prefix3" /> <asp:ListItem Text="Prefix1 and Prefix2" Value="Prefix1 and Prefix2" /> <asp:ListItem Text="Prefix2 and Prefix3" Value="Prefix2 and Prefix3" /> </asp:DropDownList> <asp:DataList ID="DataList1" runat="server"
  • 使用必填字段验证器更改文本框颜色。 请没有扩展控件(Change Text Box Color using Required Field Validator. No Extender Controls Please)
    问题 每当单击“提交”按钮时,需要激活文本框的必需字段验证器时,我就需要更改其颜色 回答1 您可以做的是注册一个Javascript函数,该函数将在提交后遍历全局Page_Validators数组,并且可以适当地设置背景。 这样做的好处是您可以在页面上的所有控件上使用它。 该函数如下所示: function fnOnUpdateValidators() { for (var i = 0; i < Page_Validators.length; i++) { var val = Page_Validators[i]; var ctrl = document.getElementById(val.controltovalidate); if (ctrl != null && ctrl.style != null) { if (!val.isvalid) ctrl.style.background = '#FFAAAA'; else ctrl.style.backgroundColor = ''; } } } 最后一步是使用OnSubmit事件注册脚本: VB.NET: Page.ClientScript.RegisterOnSubmitStatement(Me.GetType, "val", "fnOnUpdateValidators();") C#: Page
  • 即使控件是隐藏的,验证仍会在ASP.NET中触发吗?(Do validations still fire in ASP.NET even if the controls are hidden?)
    问题 我有一个使用ASP.NET验证的表单。 我在aspx中使用一些内联C#来显示/隐藏某些控件,具体取决于用户的角色。 我将使用Visible属性,但是其中有很多,我只是决定使用内联C#来显示和隐藏(我知道,这不是最佳实践,但请耐心等待一秒钟)。 我遇到一个问题:提交表单时(某些字段被隐藏时),Page.IsValid始终设置为False。 即使控件未在页面上呈现,验证仍会触发吗? 另外,如果不是这种情况,是否有有效的方法来分解Page.IsValid以找出将其设置为False的原因? 回答1 如果将Visible设置为false,则不会触发对该控件的验证。 从ASP.Net验证的深度: 为什么不仅仅使用Visible = false来拥有一个不可见的验证器呢? 在ASP.NET中,控件的Visible属性具有很强的含义:完全不处理带有Visible = false的控件进行预渲染或渲染。 由于具有更强的含义,验证程序的Visible = false意味着它不仅不显示任何内容,而且不显示任何功能。 它不会被评估,不会影响页面有效性,并且不会在摘要中添加错误。 如果要验证控件但将其隐藏在页面上,请使用CSS将display设置为none。 回答2 验证器仍会触发,您也需要隐藏它们 回答3 如果控件要验证的内容不可见,则不会触发该控件的验证。 visible =“ false” 但是