Как установить свойство «Visible» элемента управления ASP.NET из функции Javascript?

По сути, я хочу знать, как лучше всего скрыть / показать элемент управления ASP.NET из функции Javascript. Я решил, что просто получу доступ к элементу управления в Javascript, используя:

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

Затем просто установите для свойства Visible элемента управления значение true / false. Кажется, это не работает, я не могу понять, как установить "Visible" на true / false. Как я могу это сделать? Кроме того, это лучший способ скрыть / показать элемент управления ASP.NET из функции Javascript?

Спасибо, Джефф

Почему все, кто ответил, были отвергнуты?

Michael Kniskern 06.11.2008 03:10

Я проголосовал против нескольких из них, потому что они были не чем иным, как опоздавшими, повторявшими то, что уже было сказано парой человек, и они даже не хотят отвечать на все вопросы ОП, а просто дают одноразовый ответ. Ответ на этот вопрос сложнее, чем el.style.display = 'none'

Jason Bunting 06.11.2008 03:17

Повторяющиеся ответы отделялись друг от друга примерно на минуту. Мы все формулировали свои ответы одновременно.

Michael Kniskern 06.11.2008 03:22

Я это понимаю; У SO есть функция, которая сообщит вам, если кто-то уже ответил на вопрос, и позволит вам затем загрузить их на страницу. Если кто-то видит, что другой уже дал такой же ответ, он должен воздержаться от публикации.

Jason Bunting 06.11.2008 03:28

Если эта функция не работает по какой-либо причине, пользователь может удалить свое сообщение, как только он разместит, и заметить 4 других человека с точно таким же ответом, если, конечно, они не были «первыми» (сортировать по самым старым или самым новым и он скажет вам, кто «выиграл»). Меня просто тошнит от беспорядка из дурацких ответов.

Jason Bunting 06.11.2008 03:30

Я проголосовал против 3 из 8 ответов (надо отдать ему должное, один пользователь удалил свой пост, как только понял, что дублирует то, что уже упоминали многие другие). И снова для меня более серьезная проблема заключается в том, что люди думают, что их однострочный ответ отвечает на все вопросы OP, когда это не так.

Jason Bunting 06.11.2008 03:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
16
6
67 098
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Ответ принят как подходящий

Свойство Visible элемента управления ASP.NET определяет, будет ли он отображаться на клиенте (т.е. отправляться клиенту). Если это ложь, когда страница отображается, она никогда не будет доставлена ​​клиенту.

Таким образом, вы не можете, технически, установить это свойство элемента управления.

Тем не менее, если элемент управления является отображается на клиенте из-за того, что свойство Visible имеет значение true, когда страница отображается, вы можете скрыть его с помощью javascript следующим образом:

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

// to show it again:
theControl.style.display = "";

Это предполагает, что атрибут id элемента управления действительно является «txtEditBox» на клиенте и что он уже виден.

Also, is that the best way to hide/show a ASP.NET control from a Javascript function?

Не обязательно «лучший» способ, хотя лучший подход - использовать определения классов CSS:

.invisible { display: none; }

Если вы хотите что-то скрыть, динамически примените этот класс к элементу; когда вы захотите показать его снова, удалите его. Обратите внимание, я считаю, что это будет работать только для элементов, значение display которых начинается как block.

Какие еще варианты для "style.display"? Как мне показать это снова?

Yttrium 06.11.2008 03:03

Понятия не имею ... но спасибо, что указали на безумное дублирование ... Я удалил свою копию: P

Timothy Khouri 06.11.2008 03:10

вместо использования 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';

Что это добавление? Все остальные уже повторяли это до тошноты. Это просто добавляет беспорядка на страницу.

Jason Bunting 06.11.2008 03:15

Не говоря уже о том, что это даже не отвечает на все его вопросы. Попробуйте в следующий раз сформулировать более подробный и продуманный ответ, а не разово надеяться на очки репутации.

Jason Bunting 06.11.2008 03:15

О, ты парень из VB ... это все объясняет. :П

Jason Bunting 06.11.2008 03:22

Нет ничего лучше, чем препятствовать участию. Обратите внимание, что за то время, которое потребовалось, чтобы запустить то, что, как я надеялся, было полезным ключом в правильном направлении, группа других людей сделала то же самое. В следующий раз я обязательно позволю вам правильно модерировать все ответы, прежде чем пытаться быть полезным.

gfrizzle 06.11.2008 22:04

Установите стиль на «display: none».

var theControl = document.getElementById("<%= txtEditBox.ClientID %>");
theControl.style.display = "none";

Этот "txtEditBox.ClientID" - важный штрих - если он runat = "server", он вам понадобится каждый раз. +1

ojrac 06.11.2008 03:03

Он не нужен вам каждый раз - он нужен только в том случае, если элемент управления не находится непосредственно на странице, на которой нет главной страницы. Если он находится на простой странице ASPX, идентификатор останется прежним.

Jason Bunting 06.11.2008 03:04

Вы правы ... Я привык всегда использовать главные страницы ASP.NET ... +1

Michael Kniskern 06.11.2008 03:09

Пользовательские элементы управления и шаблонные элементы управления также требуют, чтобы вы использовали Control.ClientID. Панель добавит к сгенерированному идентификатору

Aaron Powell 06.11.2008 03:16

Совершенно верно - большинство людей пишут нетривиальные страницы, поэтому ваш ответ заслуживает внимания.

Jason Bunting 06.11.2008 03:21

Немного поздно, но я только начал работать с ASP.NET, и этот фрагмент JavaScript мне помог. Спасибо! +1 :)

Carl Winder 20.12.2011 13:36

Для этого вы можете использовать свойство display. Но, как заметил Джейсон, это свойство DHTML DOM (на стороне клиента), которое полностью не зависит от свойства Visible ASP.NET (на стороне сервера), которое контролирует рендеринг.

theControl.style.display = "none";

Показать свойство

Вы хотите установить для свойства стиля отображения значение «none» (чтобы скрыть) или null для отображения.

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

   theControl.style.display = 'none';

   theControl.style.display = null;

Делаем это способом jQuery:

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

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

Вы не можете скрыть / показать версию элемента управления ASP.NET, поскольку она существует только в контексте сервера. Чтобы использовать JavaScript, вам нужно поиграть со стилем управления / состоянием видимости.

Единственный способ сделать это - обернуть элемент управления в UpdatePanel и получить что-то вроде этого:

<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!" />

Тогда вам понадобится это в вашем коде:

protected void toggle(object sender, EventArgs e){
  myTextBox.Visibility = !myTextBox.Visibility;
}

Теперь, когда вы нажимаете кнопку, происходит асинхронная обратная передача, которая обновляет UpdatePanel.

Примечание: Это не решение хорошо, так как это будет очень тяжелый запрос AJAX, потому что вам нужно отправить ViewState.

Кроме того, это может быть не на 100% правильно, я сделал это по памяти.

Черт возьми - поговорим о долгом пути домой!

Jason Bunting 06.11.2008 03:19

Эй, никогда не говорил, что это ХОРОШЕЕ решение, просто полностью .NET-решение;) Если вы не собираетесь использовать display = "none", то вы дурак! Я только что увидел, что каждое из этих решений было отклонено, подумал, может быть, нужно чистое решение ASP.NET: P

Aaron Powell 06.11.2008 03:23

Страшно то, что мы с вами знаем, что это не совсем хороший способ сделать это, но я готов поспорить, что кто-то увидит ваше решение и подумает: «Эй, это отличный способ сделать это - без JavaScript !! ! " - эти люди меня пугают. :)

Jason Bunting 06.11.2008 03:34

А затем мы отправляемся в ежедневный wtf! Я должен поместить этот код в свой блог как пример того, чего не следует делать.

Aaron Powell 06.11.2008 03:38

Я согласен - иногда приятно иметь плохой пример. Черт возьми, я уверен, что часть моего кода с прошлой недели может служить плохим примером. Постоянно учусь ...

Jason Bunting 06.11.2008 03:40

Или, если вы не хотите использовать css:

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

Я думаю, что лучшим решением будет поместить ваш ASP-элемент управления в div и установить свойство display на элемент 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>

Другие вопросы по теме