function ShowDiv(obj)
{
var dataDiv = document.getElementById(obj);
dataDiv.style.display = "block";
}
Что я делаю не так?
Находится ли div внутри какого-либо контейнера именования? Просмотрите исходный код страницы и проверьте, есть ли элемент с идентификатором "данные". rahul 16.11.2009
Почему вы используете JS для отображения div при использовании AutoPostBack? Поместите DataList в панель или создайте div runat="server" и просто динамически добавьте стиль отображения. Mehdi Golchin 16.11.2009
if (lstFilePrefix1.SelectedValue=="Prefix2")
{
int TotalRows = this.BindList(1);
this.Prepare_Pager(TotalRows);
data.Style["display"] = "block";
}
Ваш метод не работает, потому что javascript отображается в верхней части тега body до отображения div. Вам нужно будет включить код, чтобы сказать javascript ждать, пока DOM будет полностью готов принять ваш запрос, что, вероятно, будет проще всего сделать с jQuery.
Ответ 2 · рейтинг 71 · Dan Diplo
Вы можете использовать стандартную панель ASP.NET, а затем установите его свойство visible в коде позади.
Существует несколько способов управления рендерингом/отображением элементов управления на странице, и вы должны обратить внимание на то, что происходит с каждым методом.
Визуализация и видимость
В некоторых случаях элементы на вашей странице не нужно отображать для пользователя из-за некоторой логики или значения базы данных. В этом случае вы можете полностью запретить рендеринг (создание элемента управления на возвращаемой веб-странице). Вы хотели бы сделать это, если элемент управления не нужно отображать позже на стороне клиента, потому что, несмотря ни на что, пользователю, просматривающему страницу, никогда не нужно его видеть.
Для любых элементов управления или элементов может быть задана видимость со стороны сервера. Если это обычный старый HTML-элемент, вам просто нужно установить значение атрибута runat на server на странице разметки.
<div id="myDiv" runat="server"></div>
Решение отображать div или нет теперь можно сделать в коде позади класса следующим образом:
myDiv.Visible = someConditionalBool;
Если установлено значение true, оно будет отображаться на странице, а если установлено значение false, оно не будет отображаться вообще, даже скрыто.
Скрытие на стороне клиента
Скрытие элемента выполняется только на стороне клиента. Это означает, что он отображается, но для него установлен стиль display CSS, который указывает вашему браузеру не показывать его пользователю. Это полезно, когда вы хотите скрыть/показать что-то на основе пользовательского ввода. Важно знать, что элемент МОЖЕТ быть скрыт и на стороне сервера, если для элемента/элемента управления установлено значение runat=server, как я объяснял в предыдущем примере.
Скрытие в классе Code Behind
Чтобы скрыть элемент, который вы хотите отобразить на странице, но скрыть, нужно выполнить еще одну простую строку кода:
myDiv.Style["display"] = "none";
Если вам необходимо удалить серверную часть стиля display, это можно сделать, удалив стиль display или установив для него другое значение, например inline или block (значения описаны здесь).
myDiv.Style.Remove("display");
// -- or --
myDiv.Style["display"] = "inline";
Скрытие на стороне клиента с помощью JavaScript
Используя простой старый javascript, вы можете легко скрыть один и тот же элемент таким образом.
var myDivElem = document.getElementById("myDiv");
myDivElem.style.display = "none";
// then to show again
myDivElem.style.display = "";
jQuery немного упрощает скрытие элементов, если вы предпочитаете использовать jQuery:
var myDiv = $("#<%=myDiv.ClientID%>");
myDiv.hide();
// ... and to show
myDiv.show();
Ответ 4 · рейтинг 2 · XtraSimplicity
Другой метод (о котором, похоже, до сих пор никто не упоминал) заключается в добавлении дополнительной пары KeyValue в массив Style элемента. то есть
Div.Style.Add("display", "none");
Это имеет дополнительное преимущество, поскольку просто скрывает элемент, а не предотвращает его запись в DOM с самого начала - в отличие от свойства "Visible". то есть
Div.Visible = false
приводит к тому, что div никогда не записывается в DOM.
Изменить: это должно быть сделано в "коде программной части", т.е. Файл *.aspx.cs.
Protected Sub DropDownList1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DropDownList1.SelectedIndexChanged
If DropDownList1.SelectedIndex = 0 Then
OK1.Style.Add("display", "none")
Else
OK1.Style.Add("display", "block")
End If
End Sub
Ответ 6 · JohnIdol
RegisteredClientScriptBlock добавляет скрипт вверху страницы при обратной передаче без нет уверенности в порядке, что означает, что либо вызов вводится после объявления функции (ваш файл js с функцией встроен после вашего звонка) или когда скрипт пытается выполнить div, вероятно, еще не существует, потому что страница все еще отображается. Хорошая идея, вероятно, состоит в том, чтобы смоделировать два сценария, которые я описал выше в firebug, и посмотреть, не появятся ли у вас похожие ошибки.
Я предполагаю, что это сработает, если вы добавите скрипт внизу страницы с RegisterStartupScript - по крайней мере, стоит попробовать.
В любом случае, в качестве альтернативного решения, если вы добавите атрибут runat="server" в div, вы сможете получить к нему доступ по его идентификатору в отделенном коде (без возврата к js - как бы круто это ни было) и заставить его исчезнуть вот так:
данные.видимый = ложь
Ответ 7 · MWinstead
У меня была проблема, когда установка element.Visible = true в моем коде не оказывала никакого влияния на реальный экран. Решение для меня состояло в том, чтобы обернуть область моей страницы, где я хотел показать div, в ASP UpdatePanel, который используется для частичного обновления экрана.
Наличие элемента runat=server дало мне доступ к нему из кода программной части, а размещение его в UpdatePanel позволило фактически обновлять его на экране.
Ответ 8 · рейтинг -2 · siva vignesh
Используя старый добрый javascript, вы можете легко скрыть тот же элемент следующим образом:
var myDivElem = document.getElementById("myDiv");
myDivElem.style.display = "none";
Затем, чтобы показать снова:
myDivElem.style.display = "";
var myDiv = $("#<%=myDiv.ClientID%>");
myDiv.hide();