Подтвердить что ты не робот

Показать скрытый div с помощью codebehind

У меня есть DropDownList, для которого я пытаюсь показать div OnSelectedIndexChanged, но он говорит OBJECT REQUIRED.

Я привязываю DataList к этому div:

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" RepeatColumns="4"  
              CssClass="datalist1"  OnItemDataBound="SOMENAMEItemBound"
              CellSpacing="6" onselectedindexchanged="DataList1_SelectedIndexChanged" 
              HorizontalAlign="Center" Width="500px">

код позади:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (lstFilePrefix1.SelectedItem.Text=="Prefix2")
    {
        int TotalRows = this.BindList(1);
        this.Prepare_Pager(TotalRows);
        Page.ClientScript.RegisterClientScriptBlock(GetType(), "JScript1", "ShowDiv('data');", true);
    }
}

JavaScript:

function ShowDiv(obj)
{
     var dataDiv = document.getElementById(obj);
     dataDiv.style.display = "block";
}

Что я делаю неправильно?

4b9b3361

Ответ 1

Сделайте div

runat="server" 

и do

if (lstFilePrefix1.SelectedValue=="Prefix2")
{
    int TotalRows = this.BindList(1);
    this.Prepare_Pager(TotalRows);
    data.Style["display"] = "block";
}

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

Ответ 2

Вы можете использовать стандартную панель ASP.NET, а затем установить в свой код видимое свойство.

<asp:Panel ID="Panel1" runat="server" visible="false" />

Чтобы отобразить панель в коде:

Panel1.Visible = true;

Ответ 3

Существует несколько способов управления отображением/отображением элементов управления на странице, и вы должны обратить внимание на то, что происходит с каждым методом.

Рендеринг и видимость

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

Любые элементы управления или элементы могут иметь свою видимость со стороны сервера. Если это простой старый элемент html, вам нужно установить значение атрибута runat на server на странице разметки.

<div id="myDiv" runat="server"></div>

Решение о выдаче div или нет теперь можно сделать в коде за классом следующим образом:

myDiv.Visible = someConditionalBool;

Если установлено значение true, оно будет отображаться на странице, и если оно ложно, оно не будет отображаться вообще, даже не скрыто.

Скрытие на стороне клиента

Скрытие элемента выполняется только на стороне клиента. Смысл, он визуализируется, но на нем установлен стиль CSS display, который указывает браузеру не показывать его пользователю. Это полезно, если вы хотите скрыть/показать вещи на основе пользовательского ввода. Важно знать, что элемент CAN может быть скрыт на стороне сервера, если элемент/элемент управления runat=server установлен так, как я объяснил в предыдущем примере.

Скрытие кода ниже класса

Чтобы скрыть элемент, который вы хотите отобразить на странице, но скрытый - это еще одна простая строка кода:

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

Другой метод (который, как представляется, никто не упомянул до сих пор), заключается в добавлении дополнительной пары KeyValue в массив элементов. то есть

Div.Style.Add("display", "none");

Это имеет дополнительное преимущество просто скрывать элемент, а не препятствовать его написанию в DOM для начала - в отличие от свойства "Visible". то есть.

Div.Visible = false

приводит к тому, что div никогда не записывается в DOM.

Изменить: это должно быть сделано в "code-behind", I.e. Файл *.aspx.cs.

Ответ 5

RegisteredClientScriptBlock добавляет script в начало страницы на обратной стороне без уверенности в заказе, что означает, что либо вызов вставляется после объявления функции (ваш js файл с функцией встроен после вашего вызова) или когда script пытается выполнить div, вероятно, еще не существует, потому что страница все еще отображается. Хорошая идея, вероятно, заключается в том, чтобы имитировать два сценария, описанных выше на Firebug, и посмотреть, есть ли у вас подобные ошибки.

Я предполагаю, что это сработает, если вы добавите script в нижней части страницы с RegisterStartupScript - по крайней мере, стоит сделать снимок.

В любом случае, в качестве альтернативного решения, если вы добавите атрибут runat="server" в div, вы сможете получить к нему доступ по его идентификатору в коде (без возврата в js - насколько это круто) и заставить его исчезнуть например:

data.visible = false

Ответ 6

У меня возникла проблема, когда параметр setting.Visible = true в моем коде позади не оказывал никакого влияния на фактический экран. Решение для меня состояло в том, чтобы обернуть область моей страницы, где я хотел показать div в ASP UpdatePanel, который используется для частичного обновления экрана.

http://msdn.microsoft.com/en-us/library/bb399001.aspx

Наличие элемента runat = server предоставил мне доступ к нему из кода и помещал его в UpdatePanel, чтобы он фактически обновлялся на экране.

Ответ 7

<div id="OK1"  runat="server" style ="display:none" >
    <asp:DropDownList ID="DropDownList2" runat="server"></asp:DropDownList>
</div>

код vb.net

  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

Ответ 8

Скрытие на стороне клиента с помощью javascript

Используя простой старый javascript, вы можете легко скрыть тот же элемент таким образом:

var myDivElem = document.getElementById("myDiv");
myDivElem.style.display = "none";

Затем, чтобы снова показать:

myDivElem.style.display = "";

jQuery упрощает скрытие элементов, если вы предпочитаете использовать jQuery:

var myDiv = $("#<%=myDiv.ClientID%>");
myDiv.hide();

... и показать:

myDiv.show();