Використання панелі або PlaceHolder


152

Яка різниця між ASP.NET <asp:Panel >і <asp:PlaceHolder >в ньому?

Коли слід використовувати одне над іншим?

Відповіді:


161

Панель розширюється до діапазону (або діва) із вмістом у ньому. Заповнювач - це лише те, що заповнює замість того, що ви помістите в нього.


19
Панель стає DIV
mbillard

4
Він також може стати Span, залежно від версії ASP.Net і браузера, який він також надає.
Стівен Роббінс

9
Мех, не запускайте мене з BrowserCaps - він також може стати єдиною таблицею комірок у .Net 1.1 у браузерах "Downlevel".
Джаф - Бен Дюгід

6
Гей, я спробував змусити передати таблицю нижчого рівня зі свого розуму .. дякую, що повернув це :-)
Стівен Роббінс

1
@Protectorone: коментарі вище стосуються панелей, а не заповнювачів.
Брайан

63

Власник заповнення не надає жодних тегів для себе, тому він чудово підходить для групування вмісту без накладних зовнішніх тегів HTML.

Панель має зовнішні теги HTML, але має деякі цікаві додаткові властивості.

  • BackImageUrl: отримує / встановлює URL-адресу фонового зображення для панелі

  • HorizontalAlign: отримує / встановлює
    горизонтальне вирівнювання вмісту батьків

  • Обгортання: отримує / встановлює, чи буде
    обгортати вміст панелі

Існує гарна стаття на startvbnet тут .


15
Ще одна цікава особливість asp: Панель полягає в тому, що вона має властивість DefaultButton, повідомляючи їй, яку кнопку натиснути, якщо користувач натискає вводити на їх клавіатурі. Зручно, якщо на одній сторінці є кілька панелей і кнопок, які потрібно працювати з кнопкою введення.
Алекс Йорк

1
@Marko після боротьби з власною спадщиною користувальницького контролю, я згоден
drzaus

У 2009 році, коли WebForms був фактично .NET способом створення ASP.NET dev, тоді так. У грудні 2012 року, майже через 4 роки, мабуть, ні. Незвичайний коментар
Рей Буйсен

1
Посилання startvbnet мертве.
mmcglynn

1
Те саме, що мої коментарі вище - дякую за те, що ви надали дуже цінну деталь. Це допомогло з'ясувати, чому вони використовуються в коді позаду, а не інші рішення для модуля DNN, який я намагаюся оновити.
користувач1585204

36

Управління PlaceHolder

Використовуйте елемент управління PlaceHolder як контейнер для зберігання елементів управління, які динамічно додаються на веб-сторінку. Елемент керування PlaceHolder не видає видимих ​​результатів і використовується лише як контейнер для інших елементів керування на веб-сторінці. Ви можете використовувати Control.Controlsколекцію для додавання, вставки або видалення елемента керування в PlaceHolder.

Панельне управління

Управління Panel є контейнером для інших елементів управління . Це особливо корисно, коли ви хочете програмно генерувати елементи управління, приховувати / показувати групу елементів управління або локалізувати групу елементів управління.

The DirectionВластивість корисно для локалізації вмісту елемента управління Panel, щоб відображати текст для мов, які пишуться справа наліво, такі як арабська або іврит.

Панель керування надає кілька властивостей, які дозволяють налаштувати поведінку та відображати її вміст. ВикористовуватиBackImageUr властивість l для відображення спеціального зображення для керування панеллю. Використовуйте ScrollBarsвластивість, щоб вказати смуги прокрутки для управління.

Невеликі відмінності при візуалізації HTML: елемент управління PlaceHolder нічого не призведе, але керування панеллю відображатиметься як <div> .

Детальніше на форумах ASP.NET


1
Це відмінне детальне пояснення. Мені просто потрібно було зрозуміти, чому ці теги використовуються де. розробник для модуля (тепер загадково зник :)) просто динамічно створюється в коді позаду. Я ніколи раніше не використовував їх, був останнім 7 років JavaScript. Дякую за чудовий внесок.
користувач1585204

5

Я дивний помилка * у візуальній студії 2010 року, якщо ви помістите елементи управління всередині заповнювача, він не відображатиме їх у режимі перегляду дизайну.

Особливо це стосується міток Hidenfields та Empty.

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


5
Люди все ще використовують режим перегляду дизайну? ;)
Метью Лок

2
ха-ха - я відмовився від його використання років тому, але MS все ще не виправили помилку
Джордж Філіпакос

Ще чекаю, коли це виправиться!
Ніккі Пенджабі

1

Як було сказано в інших відповідях, панель генерує <div>HTML-код, тоді як PlaceHolder - ні. Але є набагато більше причин, чому ви могли вибрати будь-яку.

Чому PlaceHolder?

Оскільки він не створює власний тег, ви можете безпечно використовувати його в іншому елементі, який не може містити <div>, наприклад:

<table>
    <tr>
        <td>Row 1</td>
    </tr>
    <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</table>

Ви також можете використовувати PlaceHolder для управління видимістю групи елементів керування, не загортаючи її в a <div>

<asp:PlaceHolder ID="PlaceHolder1" runat="server" Visible="false">
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    <br />
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</asp:PlaceHolder>

Чому панель

Це генерує свою власну, <div>а також може використовуватися для обгортання групи Contols. Але панель має набагато більше властивостей, які можуть бути корисні для форматування її вмісту:

<asp:Panel ID="Panel1" runat="server" Font-Bold="true"
    BackColor="Green" ForeColor="Red" Width="200"
    Height="200" BorderColor="Black" BorderStyle="Dotted">
    Red text on a green background with a black dotted border.
</asp:Panel>

Але найкориснішою особливістю є DefaultButtonвластивість. Якщо ідентифікатор збігається з кнопкою на панелі, він запускає форму форми з валідацією, коли enterнатискається всередині TextBox. Тепер користувач може надіслати форму без натискання кнопки.

<asp:Panel ID="Panel1" runat="server" DefaultButton="Button1">
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <br />
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
        ErrorMessage="Input is required" ValidationGroup="myValGroup"
        Display="Dynamic" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
    <br />
    <asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="myValGroup" />
</asp:Panel>

Спробуйте вказаний фрагмент, натиснувши enterвсерединуTextBox1

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.