Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用visible true渲染另一个隐藏元素中的隐藏元素_C#_Html_Asp.net_Vb.net_Visibility - Fatal编程技术网

C# 使用visible true渲染另一个隐藏元素中的隐藏元素

C# 使用visible true渲染另一个隐藏元素中的隐藏元素,c#,html,asp.net,vb.net,visibility,C#,Html,Asp.net,Vb.net,Visibility,问题 当容器设置为visible=“true”时,如果同时设置为visible=“true”,则其内容不会呈现 示例 当为模板字段和其中的文本框(如下所示)设置了visible=“true”时,将呈现模板字段(整列),但文本框仍保持未渲染状态 <asp:TemplateField HeaderText="Sample" Visible="false"> <ItemTemplate> <asp:TextBox ID="txt" runat="Server"

问题

当容器设置为
visible=“true”
时,如果同时设置为
visible=“true”
,则其内容不会呈现

示例

当为模板字段和其中的文本框(如下所示)设置了
visible=“true”
时,将呈现模板字段(整列),但文本框仍保持未渲染状态

<asp:TemplateField HeaderText="Sample" Visible="false">
  <ItemTemplate>
    <asp:TextBox ID="txt" runat="Server" Visible="false"/>
  </ItemTemplate>
</asp:TemplateField>

这里的目标是呈现整个列,同时仅在选定行中显示文本框

为什么?

我知道这是因为文本框尝试渲染时模板字段不存在

我还知道,如果改为使用
display:none
(在DOM中维护对象),则会按预期进行渲染

问题

假设必须使用visible false:

如何将文本框设置为visible true并与templatefield同时呈现



注意:对于那些想问为什么需要隐藏元素中的可见false的人来说?这是因为将呈现每一行(templatefield),但仅显示选定行的文本框。

所以您希望显示列,但仅显示选定行的文本框

为此,我将使用
RowDataBound

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        TextBox txt = (TextBox) e.Row.FindControl("txt");
        txt.Visible = e.Row == ((GridView)sender).SelectedRow;
    }
}
或通过索引:

txt.Visible = e.Row.RowIndex == ((GridView)sender).SelectedIndex;
但当然,整个列都需要可见,因为这个属性是从它的容器继承的。这意味着,子控件只有在可见时才可见,并且它的父控件都不可见

<asp:TemplateField Visible="true">

对于那些想问为什么需要隐藏元素中的可见false的人来说?这是因为将呈现每一行(templatefield),但仅选择文本框

您在这里回答了自己的问题,如果每个
TemplateField
都需要渲染,那么设置
Visible=false
就不是办法。从

获取或设置一个值,该值指示是否呈现数据控件字段


如果您总是希望呈现
模板字段
,那么真正要更改的是
文本框
的可见性,而不是
模板字段
。这可以通过多种方式实现,这完全取决于您想要的可见性类型,例如,如果您想要渲染它但将其隐藏,那么您可以在CSS中设置
visibility=hidden
,这意味着它将保留其布局属性,即宽度/高度等。如果您想要以不影响布局使用的方式将其隐藏
display:none
最后,如果您根本不想渲染,请在
文本框上设置
Visible=false
属性,问题不清楚。如何使列不可见,但使内部的单个
文本框可见?
TemplateField
代表的不是行,而是整个列。@TimSchmelter谢谢,我已经做了一个附录。一个显示为:none的容器及其所有子项都是不可见的,它的高度为0。您不能强制孩子可见。@florin.prisecariu display none未使用。文本框只有在容器也可见的情况下才会可见对不起,提姆,我想我不够清楚,我添加了vb来澄清我的问题。@obsidon:现在还不清楚“显示符合先决条件的文本框”的实际含义。但是,无论如何都应该使用
RowDataBound
。您可以通过
e.row.DataItem
访问每一行的数据源。然后在这里加上你的逻辑,因为这与我想问的问题无关。我已经有了显示/隐藏模板字段和显示所需文本框的代码。我的问题是:当容器设置为visible true时,如果同时也设置为visible true,则其内容不会呈现@James answer有一个正确的想法。谢谢你的努力。你完全达到了我想要做的。我只是想知道是否可以使用延迟或执行顺序来强制templatefield首先渲染。“如果您只是想隐藏它,那么可以设置Visible=false”不完全是这样。如果要完全隐藏它,请使用CSS
display:none
,这样就不会占用空间。如果要保留它的空间,请使用
可见性:隐藏
如果根本不希望渲染它,请使用
可见=false
。然后html将不会呈现,并且控件在客户端上不存在。是的,css显示无将解决此问题,但我不希望用户能够通过操纵css后期呈现来访问信息。感谢James,我使用了css。敏感数据绑定到文本框,而不是空列,所以我想我已经有了答案。@TimSchmelter是的,这是一个输入错误,我真正的意思是“未呈现”。为了清楚起见,我已经更新了。