Элемент управления заполнением и выравнивание дочерних элементов управления - PullRequest
1 голос
/ 10 марта 2009

У меня есть программа, которая отображает сообщения, опубликованные на форуме. Прямо сейчас я использую метод Response.Write в коде для вставки нужного мне HTML. Но я бы предпочел не помещать HTML-код в код позади (потому что это не соответствует духу всей функции разделения кода / дизайна в .NET). Я хотел бы использовать заполнитель содержимого и динамически вставлять дочерние элементы управления. Тем не менее, я могу только вставить их рядом и один за другим. Я хотел бы иметь что-то похожее на это:

Столбец Столбец 1 Стол Столбец 2
Имя пользователя: [UserName]
[MessageSubject]
Опубликовано: [PostDate]
Рейтинг пользователей: [UserRating]

Но единственное, что я могу сделать, это:

Имя пользователя: [UserName] Размещено: [PostDate] Рейтинг пользователей [UserRating] [MessageSubject], без ссылок или форматирования.

Как поместить абзацы, разрывы строк, кнопки форм и обычные гиперссылки в заполнитель содержимого и выровнять их так, как я хочу?

Ответы [ 5 ]

3 голосов
/ 10 марта 2009

Вы делаете это так же, как на странице .aspx, например:

Table table = new Table();
TableRow row1 = new TableRow();
table.Rows.Add(row1);
TableCell cell1 = new TableCell();
TableCell cell2 = new TableCell();
row1.Cells.Add(cell1);
row1.Cells.Add(cell2);
Label label1 = new Label();
label1.Text = "Username:";
cell1.Controls.Add(label1);
TextBox textBox1 = new TextBox();
textBox1.ID = "userNameTextBox";
cell2.Controls.Add(textBox1);
// and so on...
myPlaceholder.Controls.Add(table);

будет эквивалентно:

<asp:Table runat="server">
  <asp:TableRow runat="server">
    <asp:TableCell runat="server">
      <asp:Label runat="server" Text="Username:" />
    </asp:TableCell>
    <asp:TableCell runat="server">
      <asp:TextBox runat="server" ID="userNameTextBox" />
    </asp:TableCell>
  </asp:TableRow>
</asp:Table>

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

1 голос
/ 10 марта 2009

Попробуйте этот обзор на Веб-частях . Или, проще говоря, просто используйте Элементы управления пользователя

0 голосов
/ 10 марта 2009

Я согласен, что превращение этого в UserControl, вероятно, правильный путь. Я бы предложил вывод html, подобный следующему:

<div class="message">
    <div>
        <span class="column1">Username:</span>
        <span class="column2">[UserName]</span>
    </div>
    <div>[MessageSubject]</div>
    <div>
        <span class="column1">Posted On:</span>
        <span class="column2">[PostedOn]</span>
    </div>
    <div>
        <span class="column1">User Rating:</span>
        <span class="column2">[UserRating]</span>
    </div>
</div>

Затем вы можете применить стиль с помощью CSS, например:

<style>
    .message .column1
    {
        display: inline-block;
        width: 150px;
    }
    .message .column2
    {
        display: inline-block;
        width: 300px;
    }
</style>

Вы увидите, что тег <div>, как правило, является ответом на вопрос «как поместить это в следующую строку?»

РЕДАКТИРОВАТЬ: Если вы новичок в веб-макете, возможно, вы обнаружите план раньше, чем позже.

0 голосов
/ 10 марта 2009

Том, я реализовал практически тот же шаблон, что и вы.

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

Вместо того, чтобы фокусироваться на различии ASPX / Code-behind, я настоятельно рекомендую вам сосредоточиться на выделении кода пользовательского интерфейса из бизнес-логики. Для этого просто добавьте проект библиотеки классов (DLL) в свое решение, а затем поместите ссылку на DLL в каталог BIN. Затем страница ASPX будет выполнять вызовы в DLL для выполнения бизнес-правил и извлечения информации из вашей базы данных. То, что - это различие, которое имеет смысл с точки зрения передового опыта.

0 голосов
/ 10 марта 2009

Вы можете сделать что-то вроде этого:

<table>
<tr><td>Table Column 1</td><td>Table Column 2</td></tr>
<tr><td>Username:</td><td>[UserName]</td></tr>
<tr><td></td><td><p>[MessageSubject]</td></tr>
<tr><td>Posted On:</td><td>[PostDate]</td></tr>
<tr><td>User Rating:</td><td>[UserRating]</td></tr>
</table>

Это будет производить что-то вроде этого:

Кто-то может поспорить со мной или проголосовать за меня, но таблицы не являются злом, это то, как вы их используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...