Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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
您如何设置“0”;可见的;来自Javascript函数的ASP.NET控件的属性?_Asp.net_Javascript - Fatal编程技术网

您如何设置“0”;可见的;来自Javascript函数的ASP.NET控件的属性?

您如何设置“0”;可见的;来自Javascript函数的ASP.NET控件的属性?,asp.net,javascript,Asp.net,Javascript,基本上,我想知道从Javascript函数隐藏/显示ASP.NET控件的最佳方法。我想我应该使用Javascript访问控件: var theControl = document.getElementById("txtEditBox"); 然后只需将控件的Visible属性设置为true/false。它似乎不起作用,我似乎不知道如何将“可见”设置为真/假。我该怎么做?另外,这是从Javascript函数隐藏/显示ASP.NET控件的最佳方法吗 谢谢, JeffASP.NET控件的“Visibl

基本上,我想知道从Javascript函数隐藏/显示ASP.NET控件的最佳方法。我想我应该使用Javascript访问控件:

var theControl = document.getElementById("txtEditBox");
然后只需将控件的Visible属性设置为true/false。它似乎不起作用,我似乎不知道如何将“可见”设置为真/假。我该怎么做?另外,这是从Javascript函数隐藏/显示ASP.NET控件的最佳方法吗

谢谢, Jeff

ASP.NET控件的“Visible”属性决定是否在客户端呈现(即发送到客户端)。如果在呈现页面时为false,它将永远不会到达客户端

所以,从技术上讲,您不能设置控件的那个属性

也就是说,如果控件在客户端呈现,因为呈现页面时Visible属性为true,则可以使用javascript将其隐藏,如下所示:

var theControl = document.getElementById("txtEditBox");
theControl.style.display = "none";

// to show it again:
theControl.style.display = "";
<asp:UpdatePanel ID="panel" runat="server">
  <ContentTemplate>
    <asp:TextBox ID="myTextBox" runat="server" />
  </ContentTemplate>
  <Triggers>
    <asp:AsynchronousPostbackTrigger ControlID="button" EventName="Click" />
  </Triggers>
</asp:UpdatePanel>
<asp:Button ID="button" runat="server" OnClick="toggle" Text="Click!" />
这假设控件的
id
属性在客户端上确实是“txtEditBox”,并且它已经可见

另外,这是从Javascript函数隐藏/显示ASP.NET控件的最佳方法吗

虽然更好的方法是使用CSS类定义,但不一定有“最佳”方法:

.invisible { display: none; }

当您想要隐藏某些内容时,动态地将该类应用于元素;如果要再次显示,请将其删除。注意,我相信这只适用于
display
值以
block
开头的元素,而不是使用visible,将其css设置为display:none

//css:
.invisible { display:none; }

//C#
txtEditBox.CssClass = 'invisible';
txtEditBox.CssClass = ''; // visible again

//javascript
document.getElementById('txtEditBox').className = 'invisible'
document.getElementById('txtEditBox').className = ''

这将隐藏控件:

theControl.style.display = 'none';
将样式设置为“显示:无”

var theControl=document.getElementById(“”);
control.style.display=“无”;

您可以为此使用“显示”属性。但正如Jason所指出的,这是一个DHTML DOM(客户端)属性,它完全独立于控制渲染的ASP.NET(服务器端)可见属性

theControl.style.display = "none";

要将显示样式属性设置为“无”(隐藏)或
null
显示

   var theControl = document.getElementById("txtEditBox");

   theControl.style.display = 'none';

   theControl.style.display = null;
以jQuery的方式执行此操作:

   $('#txtEditBox').hide();

   $('#txtEditBox').show();

无法隐藏/显示控件的
ASP.NET
版本,因为该版本仅存在于服务器上下文中。要使用JavaScript,您需要使用控件样式/可见性状态

唯一的方法是将控件包装在UpdatePanel中,并具有如下内容:

var theControl = document.getElementById("txtEditBox");
theControl.style.display = "none";

// to show it again:
theControl.style.display = "";
<asp:UpdatePanel ID="panel" runat="server">
  <ContentTemplate>
    <asp:TextBox ID="myTextBox" runat="server" />
  </ContentTemplate>
  <Triggers>
    <asp:AsynchronousPostbackTrigger ControlID="button" EventName="Click" />
  </Triggers>
</asp:UpdatePanel>
<asp:Button ID="button" runat="server" OnClick="toggle" Text="Click!" />
现在,当您单击该按钮时,将发生异步回发,它将刷新UpdatePanel

注意:这不是一个好的解决方案,因为这将是一个非常繁重的AJAX请求,因为您需要提交ViewState


另外,它可能不是100%正确,我是从内存中完成的。

或者如果您不想使用css:

<asp:TextBox ID="txtBox" runat="server" style="display:none;">

我认为最好的解决方案是将ASP控件放在div中,并将属性显示设置为div元素

<div id="divTest">            
   <asp:TextBox ID="txtTest" runat="server"></asp:TextBox>
</div>

<script type="text/javascript">
    SIN JQuery
    document.getElementById('divTest').style.display = "none";

    CON JQuery
    $('#divTest').hide();
</script>

SinjQuery
document.getElementById('divTest').style.display=“无”;
conjquery
$('#divTest').hide();


style.display的其他选项是什么?我该怎么再看一遍?不知道。。。但是谢谢你指出这疯狂的复制品。。。我已经删除了我的副本:p该“txtEditBox.ClientID”是一个重要的提示——如果它是runat=“server”,那么您每次都需要它+1您并不每次都需要它-您只需要在控件不直接位于没有母版页的页面中时才需要它。如果它在一个简单的ASPX页面上,ID将保持不变。你是对的。。。我习惯于总是使用ASP.NET母版页…+1 SERCONTROLS和模板控件也需要您使用Control.ClientID。一个面板将晚一点添加到生成的IDA中,但我刚刚开始使用ASP.NET,这段JavaScript帮助了我。谢谢+1:)为什么每个回答的人都会被否决票所抨击?我否决了其中一些人,因为他们只是后来者,重复了一些人已经说过的话,他们甚至不想回答OP的所有问题,而只是一次性回答。这个问题的答案比el.style.display='none'更复杂,我明白这一点;所以有一个功能,可以让你知道是否有人已经回答了这个问题,并允许你在页面中加载这些问题。如果有人看到另一个人已经提供了相同的答案,他们应该避免发布。如果该功能出于任何原因不起作用,用户可以在发布后立即删除他们的帖子,并注意到其他4个人的答案完全相同,当然,除非他们是“第一个”(按最老或最新排序,它会告诉你谁“赢了”).我只是厌倦了杂乱无章的重复答案。我在8个答案中否决了3个(值得赞扬的是,一位用户在意识到自己重复了许多其他人已经提到的内容后删除了他的帖子)。再一次,对我来说,更大的问题是,人们认为他们的一行回答解决了OP的所有问题,而事实并非如此。这又增加了什么?其他人都已经重复了这一点,真是不可思议。这只会让页面更加混乱,更不用说,它甚至没有真正回答他的所有问题。下次试着制定一个更长、更深思熟虑的回答,而不是一次过的希望获得声誉积分。哦,你是一个VB的家伙……这就解释了没有什么比阻止参与更令人沮丧的了。请注意,在我希望在正确的方向上提供有用的线索的时候,其他一些人也这样做了。下一次我一定会让你在试图提供帮助之前适当地调整所有的答案。天啊,废话-谈论回家的路!嘿,从来没有说过这是一个好的解决方案,只是一个完全的.NET解决方案;)如果您不打算使用display=“none”,那么您就是一个傻瓜!我只是看到这些解决方案中的每一个都被否决了,我想可能需要一个纯ASP.NET的解决方案:P可怕的是,你和我都知道这不是真的