Как установить элементы управления на панели ASP на Отображение: нет, когда на панели установлено Отображение: нет - PullRequest
0 голосов
/ 06 ноября 2019

Я установил несколько панелей внутри элементов управления, чтобы показать / скрыть вещи в зависимости от номера версии. У меня есть код, который проходит через панели на странице, и если номер версии не совпадает, тогда для панели устанавливается значение Дисплей: Нет . Я знаю, что панели установлены на Дисплей: нет , потому что я проверял его в инструментах Chrome Developer при отладке. Проблема в том, что элементы управления, обернутые внутри панелей, по-прежнему отображаются на странице. Ниже описывается, как панель настраивается в HTML и код, который устанавливает отображение панелей: нет. Пожалуйста, порекомендуйте. Спасибо.

Работает, если для панели visible установлено значение false, однако мне все еще нужны элементы управления для отображения на странице, даже если они не отображаются.

<asp:Panel runat="server" version="1" ID="property113_v1">
    <tr>
        <td class="asterisk">&nbsp;</td>
        <td colspan="2" class="required">How to blank? </td>
    </tr>
    <tr>
        <td>&nbsp;</td>
        <td colspan="2"><asp:RadioButtonList ID="property113" runat="server" RepeatDirection="horizontal" RepeatLayout="flow">
            <asp:ListItem Text="Yes" Value="Y"></asp:ListItem>
            <asp:ListItem Text="No" Value="N"></asp:ListItem>
        </asp:RadioButtonList>
        <asp:RequiredFieldValidator ID="property113Validator" runat="server" ControlToValidate="property113"
            ErrorMessage="" Display="dynamic" ValidationGroup="Page"><span class="validator">&nbsp;</span></asp:RequiredFieldValidator></td>
    </tr></asp:Panel>



    foreach (Panel pnl in p)
    {

        if (pnl.Attributes["Version"] != null)
        {
            if (pnl.Attributes["Version"] == ver)
            {
                pnl.Style.Add(HtmlTextWriterStyle.Display, "");
            }
            else
            {
                pnl.Style.Add(HtmlTextWriterStyle.Display, "none"); 
            }
        }
    }

}

1 Ответ

2 голосов
/ 06 ноября 2019

Ваш код приводит к недействительному HTML, div не может быть родительским для tr. Это вызывает вашу проблему, для демонстрации смотрите: https://jsfiddle.net/4n6qkfzw/

Вам необходимо использовать правильный элемент tbody

Обновите aspx, чтобы использовать аналогичные тоже

<!-- use the tbody tag with runat=server here -->
<tbody runat="server" version="1" ID="property113_v1">
    <tr>
        <td class="asterisk">&nbsp;</td>
        <td colspan="2" class="required">How to blank? </td>
    </tr>
    <tr>
        <td>&nbsp;</td>
        <td colspan="2"><asp:RadioButtonList ID="property113" runat="server" RepeatDirection="horizontal" RepeatLayout="flow">
            <asp:ListItem Text="Yes" Value="Y"></asp:ListItem>
            <asp:ListItem Text="No" Value="N"></asp:ListItem>
        </asp:RadioButtonList>
        <asp:RequiredFieldValidator ID="property113Validator" runat="server" ControlToValidate="property113"
            ErrorMessage="" Display="dynamic" ValidationGroup="Page"><span class="validator">&nbsp;</span></asp:RequiredFieldValidator></td>
    </tr></tbody>

Теперь обновите ваш код до чего-то похожего на:

List<HtmlGenericControl> tbodies = new List<HtmlGenericControl>{/*Populate your list here*/};
foreach (HtmlGenericControl tbody in tbodies)
{

    if (tbody.Attributes["version"] != null)
    {
        if (tbody.Attributes["version"] == ver)
        {
            tbody.Style.Add(HtmlTextWriterStyle.Display, "");
        } /*Probably actually don't need the else statment
        else
        {
            pnl.Style.Add(HtmlTextWriterStyle.Display, "none"); 
        }
       */
    }
}
...